高階函數(shù)

維基百科這樣描述:

高階函數(shù)是至少滿足下列一個條件的函數(shù):

  • 接受一個或多個函數(shù)作為輸入
  • 輸出一個函數(shù)

簡言之,一個函數(shù)可以將其他函數(shù)作為參數(shù)或者返回值是函數(shù),這個函數(shù)就是高階函數(shù)。

JavaScript中的高階函數(shù)

  • map
    1. 定義:通過指定的函數(shù)去處理數(shù)組中的每個元素,并返回處理后的新數(shù)組。
    2. 語法:array.map(function(currentValue,index,arr), thisValue)
    3. 實例:
      function multi(x) {
          return x * 10;
      }
      var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
      var results = arr.map(multi); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
      console.log(results);
      //結(jié)果為:10,20,30,40,50,60,70,80,90
      
      function multi(element, index, arr) {
          console.log(element, index, arr)
          return element * 10;
      }
      var arr = [10, 20, 30, 40, 50, 60, 70, 80, 90];
      var results = arr.map(multi); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
      console.log(results);
      
  • reduce

    1. 定義:接收一個函數(shù)作為累加器,數(shù)組中的每個值(從左到右)開始縮減,最終計算為一個值。

    2. 語法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
      注意:末尾的參數(shù)initialValue可以指定total初始值。

    3. 實例

      // 求和
      var arr = [1, 3, 5, 7, 9];
      var sum = arr.reduce(function (x, y) {
          return x+y
      });
      console.log(sum) // 25
      
      //是指拼接
      var arr = ['1', '3', '5', '7', '9'];
      var sum = arr.reduce(function (x, y) {
          return x+y
      },5);
      console.log(sum) // 513579
      
  • filter

    1. 定義: 創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。
    2. 語法:array.filter(function(currentValue,index,arr), thisValue)
    3. 實例
      var arr = [1, 2, 4, 5, 6, 9, 10, 15];
      var newArr = arr.filter(function (x) {
          return x > 8;
      });
      console.log(newArr) //[ 9, 10, 15 ]
      

以上部分的高階函數(shù)是將函數(shù)作為輸入,當(dāng)然還可以將函數(shù)作為結(jié)果值返回。

function lazy_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
    return sum;
}

var f = lazy_sum([1, 2, 3, 4, 5]); 

f(); // 15

當(dāng)調(diào)用lazy_sum函數(shù)時,返回的是內(nèi)層的sum函數(shù)。

在這個實例中,引出了另外一個概念:閉包

在一些語言中,在函數(shù)中可以(嵌套)定義另一個函數(shù)時,如果內(nèi)部的函數(shù)引用了外部的函數(shù)的變量,則可能產(chǎn)生閉包。運行時,一旦外部的 函數(shù)被執(zhí)行,一個閉包就形成了,閉包中包含了內(nèi)部函數(shù)的代碼,以及所需外部函數(shù)中的變量的引用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容