js中的高階函數

高階函數

高階函數是函數式編程的一種代碼實現方案,通常把接受一個或多個函數做爲參數,或者返回一個函數的函數叫作高階函數。

js中最多見的一些高階函數如閉包(返回函數),一些內置函數(傳入函數)等。編程

Array.prototype.reduce

例:
image.png
reduce接受兩個參數,返回操做後的數據。數組

參數一(必須):函數累計器,聲明要對數組的每個值執行的操做,累計器默認被傳入四個參數,分別表示累計器上一次返回累計值,數組正在處理的元素,正在處理的元素下標,調用reduce的數組;其中前兩個必選,後兩個可選。緩存

參數二(可選):聲明累計器的初始值,沒有的話默認選擇數組的第一個元素做爲累計器的第一個值。閉包

常見錯誤函數式編程

image.png

當對空數組執行reduce操做時,必須指定參數二,保證累加器有一個初始值,不然會報錯,如上圖。函數

image.png

上圖的代碼執行順序性能

  1. 將數組的第一個元素 1 做爲累計器的初始值;
  2. 第一次循環,從數組的第二個元素開始,初始值1,當前值2,下標1;
  3. 第二次循環,初始值爲以前的累計值 3,當前值3,下標2;
  4. 獲得最終累計值爲6,返回結果,計算結束下標1;
Array.prototype.map

例:
普通用法測試

image.png

數組包含空元素this

image.png

複雜數組spa

image.png

回調函數全部參數

image.png

map可選參數測試

image.png
image.png

map接受兩個參數

參數一(必須):一個回調函數,這個函數會被自動傳入三個參數分別表示數組元素,數組下標,數組自己;函數內聲明對原數組的每一項作的指定操做,並將獲得的數據放入一個新數組並返回;

參數二(可選):用來指定回調函數中this的指向

常見錯誤

將\['1','2','3'\]轉換爲數字數組

轉換數字能夠用parseInt,parseFloat,Number等方法,依次試驗一下,結果以下:

image.png

這時候發現傳入parseInt做爲轉換函數得不到想要的結果,回想一下,map接受的函數參數會被默認傳入三個參數,而實際上,parseInt在使用過程當中是能夠接受兩個參數的,第一個是解析的字符串,而第二個可選的參數,用來表示轉換的進制,嘗試一下:

image.png

因此錯誤的緣由來自於此,當parseInt做爲map的參數時,第二個參數被傳入數組的下標,致使得不到想要的結果。
而parseFloat和Number則不存在這個問題。由於這兩個函數都是智能接收一個字符串參數,而且返回轉換後的結果。

Array.prototype.filter

示例:
image.png

filter接受兩個參數
參數一(必選) 回調函數,指定過濾條件,回調函數接收三個參數,如上圖所示,分別爲當前處理的數組元素,當前處理的數組下標,調用filter的數組自己,而且返回一個過濾條件,符合條件的數組元素會被放入新數組返回;
參數二(可選) 同map,用來指定回調函數中this的指向;

經過高階函數,咱們還能夠實現一些諸如函數緩存,函數柯里化等來提升js代碼的性能及可讀性,這個下次在說

相關文章
相關標籤/搜索