JavaScript編程精解——高階函數

高階函數其實就是一個函數,將另外一個函數做爲參數或者(函數)返回值,簡單說,就是一個函數操做了另外一個函數;數組

function a(n){        
        return function b(m){return m>n}     
    }     
    var funA = a(10);     
    console.log(funA(8));     
    //false

你沒看錯這是一個閉包,也是一個高階函數,在函數a中將函數b做爲返回值; 下面咱們來看一下JavaScript固有的高階函數:閉包

  • reduce reduce的調用方法:array.reduce(fun); //array是一個數組;fun是一個函數,僅接收兩個參數; reduce函數的做用:按個人理解,reduce函數對數組中的每一個元素根據必定條件(fun函數約定的條件)進行操做,最後返回一個值,fun函數接收兩個參數,fun(a,b),是array的第一個和第二個元素,根據條件進行運算,返回的結果一次對array的第三個,直到最後一個元素進行運算,並返回最後結果。
[1,2,5,6,7,8,9].reduce(function(a,b){
        return a+b;
    });
    //38 (返回數組之和)
     [1,2,5,6,7,8,9].reduce(function(a,b){
        if(a>b){
            return a;
        }else{
            return b;
        }
    });
    //9   (返回最大值)

經過這兩個例子,能夠看出reduce是對數組的一個累計計算的操做;能夠舉個例子: var list= [1,2,5,6,7,8,9]; 對數組求和: 首先咱們能夠設定一個變量,讓他依次和數組中的每一個元素累加,最後得出這個變量的值就是數組的和,ok,show me the code: function sum(list,result){ for(var i=0;i<list.length;i++){ result +=list[i]; } return result; } console.log(sum(list,0)); //38函數

  • filter filter函數的做用,簡單來講是過濾數組,返回一個知足條件的數組:篩選出數組中符合條件的元素,組成一個新數組,並返回; array.filter(fun); [1,2,5,6,7,8,9].filter(function(a){ return a>6; });
  • map array.map(fun); map與filter相似,數組通過必定的條件(fun函數),對數組中每一個對應的元素進行操做後,返回新的數組; 與filter的區別:map返回的是數組元素與原數組的元素不相同(值和類型均可能不一樣);map返回的數組的元素個數與原數組相等; 來個例子吧:
[1,2,5,6,7,8,9].map(function(a){
    return a+6;
});
// [7, 8, 11, 12, 13, 14, 15]  (返回的新數組)

多說一句,通過試驗,map函數接收三個參數,array.map(fun(item,i,curList){ //item 爲當前數據; //i 爲索引值(0開頭); //curList 爲數組,即array; })code

[1,2,5,6,7,8,9].map(function(item,i,curList){
       console.log(item,i,curList);
});
  • sort sort是對函數進行從新排序; array.sort(fun); fun接收兩個參數,fun是排序遵循的條件;來個例子吧:
[7, 64, 131, 1, 3, 14, 5].sort(function(a,b){
    return a-b;   //按升序排列數組
    //return b-a;   //按降序排列數組
})
//[1, 3, 5, 7, 14, 64, 131]   (執行結果)
// [131, 64, 14, 7, 5, 3, 1]  (按降序排列執行的結果)
  • reverse 對當前數組進行倒序排列,返回新數組; [1, 3, 5, 7, 14, 64, 131] 數組的降序也能夠寫成:[1, 3, 5, 7, 14, 64, 131] .reverse()
[1, 3, 5, 7, 14, 64, 131] .reverse();
//[131, 64, 14, 7, 5, 3, 1]

差很少就這麼多吧,有什麼不到的地方還請你們多指教,😆排序

相關文章
相關標籤/搜索