從 ES6 高階箭頭函數理解函數柯里化

前言:第一次看到多個連續箭頭函數是在一個 react 項目中,然鵝確認了下眼神,並非對的人,由於看得一臉懵逼。em......因而開始各類搜索,先是知道了多個連續箭頭函數就是 es6 的屢次柯里化的寫法,對於函數柯里化,好久之前就知道這個名次,可是並不理解,也沒有去了解。爲了弄明白多個連續箭頭函數,開始了簡化之路。

首先看到了這樣的一個例子:react

let add = a => b => a + b

以上是一個很簡單的相加函數,把它轉化成 ES5 的寫法以下:es6

let add = function(a) {
    return function(b) {
        return a + b;
    }
}

再簡化一下,能夠寫成以下形式:閉包

let add = function(a) {
    var param = a;
    var innerFun = function(b) {
        return param + b;
    }
    return innerFun;
}

雖然好像沒什麼意義,可是很顯然上述使用了閉包,並且該函數的返回值是一個函數。其實,這就是高階函數的定義:以函數爲參數或者返回值是函數的函數。函數

那麼,這跟柯里化有什麼關係呢?code

再來看一下 wiki 裏面對柯里化的定義把接受多個參數的函數變換成接受一個單一參數的函數,而且返回(接受餘下的參數並且返回結果的)新函數的技術。能夠對一個連續的箭頭函數進行屢次柯里化。n 個連續箭頭組成的函數實際上就是柯里化了 n - 1 次,而前 n - 1 次調用,實際上是提早將參數傳遞進去,並無調用最內層函數體,最後一次調用纔會調用最內層函數體,並返回最內層函數體的返回值。io

若是把函數柯里化和閉包聯繫在一塊兒,就比較好理解了。function

相關文章
相關標籤/搜索