JavaScript函式柯里化的作用
本章節介紹一下函式柯里化的作用,需要的朋友可以做一下參考。
關於柯里化的概念和實現可以參閱JavaScript函式柯里化詳解一章節。
下面就通過程式碼例項做一下介紹,廢話不多說,直接進入正題。
一.提高函式的適用性:
在某些時候我們追求通用性,但是通用性帶來的一個後果就是適用性減弱。
這是非常好理解的,比如你想學好所有的科學知識,那麼你很容易對所有的知識都不夠精通。
看下面的程式碼例項:
[JavaScript] 純文字檢視 複製程式碼function square(i) { return i * i; } function dubble(i) { return i *= 2; } function map(handeler, list) { return list.map(handeler); } // 陣列的每一項平方 map(square, [1, 2, 3, 4, 5]); map(square, [6, 7, 8, 9, 10]); map(square, [10, 20, 30, 40, 50]); // 陣列的每一項加倍 map(dubble, [1, 2, 3, 4, 5]); map(dubble, [6, 7, 8, 9, 10]); map(dubble, [10, 20, 30, 40, 50]);
上面程式碼的通用性是沒有任何問題的,但是我們可以通過柯里化函式的方式進行以下優化。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼function square(i){ return i * i; } function dubble(i){ return i *= 2; } function map(handeler,list){ return list.map(handeler); } var curriedSquare = currying(map, square); curriedFunc([1, 2, 3, 4, 5]); curriedFunc([6, 7, 8, 9, 10]); curriedFunc([10, 20, 30, 40, 50]); var curriedDubble = currying(map, dubble); curriedDubble([1, 2, 3, 4, 5]); curriedDubble([6, 7, 8, 9, 10]); curriedDubble([10, 20, 30, 40, 50]);
上面的程式碼中,函式經過柯里化之後,適用性明顯增強(當然犧牲的是通用性),但是可以讓呼叫方式簡便很多。
二.實現延遲執行:
這裡所謂的延遲執行就是不斷的累積引數,最後執行。
這個程式碼例項其實在講述柯里化實現的那文章中已經介紹,也可以參閱JavaScript函式無限級求和一章節。
三.固定易變因素:
柯里化可以提前把易變因素,傳參固定下來,生成一個更明確的應用函式。
最典型的代表應用,是bind函式用以固定this這個易變物件。
[JavaScript] 純文字檢視 複製程式碼Function.prototype.bind = function (context) { var _this = this, _args = Array.prototype.slice.call(arguments, 1); return function () { return _this.apply(context, _args.concat(Array.prototype.slice.call(arguments))) } }
其實也可以說是使用閉包實現了此功能,但是也有一定的柯里化特性。
內建的bind()方法可以參閱javascript bind()函式一章節。
相關文章
- JavaScript函式柯里化JavaScript函式
- [譯] JavaScript中的函式柯里化JavaScript函式
- JavaScript函式柯里化詳解JavaScript函式
- JavaScript進階之函式柯里化JavaScript函式
- 函式柯里化函式
- JS:函式柯里化JS函式
- Js函式柯里化JS函式
- 深入理解javascript系列(十七):函式柯里化JavaScript函式
- 前端戰五渣學JavaScript——函式柯里化前端JavaScript函式
- 函式的合成與柯里化函式
- 高階函式應用 —— 柯里化與反柯里化函式
- JS高階函式-函式柯里化JS函式
- JavaScript柯里化JavaScript
- js柯里化函式的好處JS函式
- JavaScript中的事件迴圈機制跟函式柯里化JavaScript事件函式
- 前端之函式柯里化Currying前端函式
- 函式柯里化和偏函式應用函式
- JS中的 偏函式 和 柯里化JS函式
- [譯] 柯里化與函式組合函式
- JS 分步實現柯里化函式JS函式
- JS專題之函式柯里化JS函式
- javascript中bind繫結接收者與函式柯里化JavaScript函式
- JavaScript函數語言程式設計(純函式、柯里化以及組合函式)JavaScript函數程式設計函式
- 「譯」理解JavaScript的柯里化JavaScript
- JavaScript 中的函數語言程式設計:函式,組合和柯里化JavaScript函數程式設計函式
- JavaScript 函數語言程式設計---柯里化JavaScript函數程式設計
- 用大白話介紹柯里化函式函式
- 【譯】理解JavaScript中的柯里化JavaScript
- 柯里化與反柯里化
- Javascript currying柯里化詳解JavaScript
- 「前端進階」徹底弄懂函式柯里化前端函式
- 手寫系列:call、apply、bind、函式柯里化APP函式
- 「前端面試題系列6」理解函式的柯里化前端面試題函式
- 打造屬於自己的underscore系列(五)- 偏函式和函式柯里化函式
- JavaScript 函數語言程式設計技巧 - 反柯里化JavaScript函數程式設計
- 瞭解 JavaScript 函數語言程式設計 - 柯里化JavaScript函數程式設計
- 一段柯里化函式程式碼閱讀函式
- 深入 call、apply、bind、箭頭函式以及柯里化APP函式