柯里化函式之Javascript
定義
根據定義來說,柯里化就是將一個接收“多個”引數的函式拆分成一個或者許多個接收“單一”引數的函式。定義看起來是比較抽象的,下面來舉個例子:
程式碼
1 2 3 4 5
|
function concat(str1,str2){ return str1 + str2; } concat("forever","px") // "foreverpx"
|
不難理解,上面的程式碼中定義了一個連線字串的函式,返回連線兩個傳入引數的字串。現在我們再看看另一種定義方式:
1 2 3 4 5 6 7 8
|
function concatCurry(str1){ return function(str2){ return str1 + str2; } } var concatOne = concatCurry("forever"); concatOne("px"); //foreverpx
|
上面的程式碼中,我們將一開始傳入兩個引數的函式改裝成了一個(或者說是兩個)只接收一個引數的函式。
我們來建立一個將接受多個引數的函式柯里化的通用函式:
1 2 3 4 5 6 7 8 9
|
function curry(fn) { var args = [].slice.call(arguments, 1); return function() { return fn.apply(null, args.concat([].slice.call(arguments, 0))); } } var concatOne = curry(concat,"forever"); concatOne("px"); //foreverpx
|
柯里化的過程利用了閉包,使得返回的函式也能獲得第一次傳入的引數。
首先將傳入的第二個引數存入args變數中,然後返回一個函式,在返回的函式中,將第一次傳入的引數與柯里化之後傳入的引數拼接起來成一個陣列,然後通過apply方法呼叫柯里化之前的函式(fn),這樣就達到了柯里化的效果。
如果是三個引數的函式想要柯里化,則如下:
1 2 3 4 5 6 7 8
|
function concat(s1,s2,s3){ return s1+s2+s3; } var cur1 = curry(concat,"forever"); var cur2 = curry(cur1,"px"); cur2("-me"); //foreverpx-me
|
文章作者:foreverpx
文章原文連結:柯里化函式之Javascript
相關文章
- JavaScript函式柯里化JavaScript函式
- JavaScript進階之函式柯里化JavaScript函式
- JavaScript函式柯里化詳解JavaScript函式
- JavaScript函式柯里化的作用JavaScript函式
- [譯] JavaScript中的函式柯里化JavaScript函式
- 前端之函式柯里化Currying前端函式
- 函式柯里化函式
- JS專題之函式柯里化JS函式
- JS:函式柯里化JS函式
- Js函式柯里化JS函式
- 深入理解javascript系列(十七):函式柯里化JavaScript函式
- 前端戰五渣學JavaScript——函式柯里化前端JavaScript函式
- 高階函式應用 —— 柯里化與反柯里化函式
- JS高階函式-函式柯里化JS函式
- JavaScript柯里化JavaScript
- 函式的合成與柯里化函式
- 函式柯里化和偏函式應用函式
- JavaScript之函式柯理化JavaScript函式
- [譯] 柯里化與函式組合函式
- JS 分步實現柯里化函式JS函式
- js柯里化函式的好處JS函式
- javascript中bind繫結接收者與函式柯里化JavaScript函式
- JavaScript中的事件迴圈機制跟函式柯里化JavaScript事件函式
- JavaScript函數語言程式設計(純函式、柯里化以及組合函式)JavaScript函數程式設計函式
- JavaScript 函數語言程式設計---柯里化JavaScript函數程式設計
- 用大白話介紹柯里化函式函式
- JS中的 偏函式 和 柯里化JS函式
- JavaScript 中的函數語言程式設計:函式,組合和柯里化JavaScript函數程式設計函式
- 柯里化與反柯里化
- Javascript currying柯里化詳解JavaScript
- 「譯」理解JavaScript的柯里化JavaScript
- 「前端進階」徹底弄懂函式柯里化前端函式
- 手寫系列:call、apply、bind、函式柯里化APP函式
- JavaScript 函數語言程式設計技巧 - 反柯里化JavaScript函數程式設計
- 瞭解 JavaScript 函數語言程式設計 - 柯里化JavaScript函數程式設計
- 一段柯里化函式程式碼閱讀函式
- 深入 call、apply、bind、箭頭函式以及柯里化APP函式
- 【譯】理解JavaScript中的柯里化JavaScript
- 從 ES6 高階箭頭函式理解函式柯里化函式