柯里化
什麼是柯里化?
簡單來講,就是把多參數傳入的函數拆成單參數(或部分)函數,內部再返回調用下一個單參數(或部分)函數,依次處理剩餘的參數
(實則就是利用了閉包的特性)
目的:縮小適用範圍,建立一個針對性更強的函數
用途:簡化代碼結構,提升系統的可維護性,強制了功能的單一性,天然就作到功能內聚,下降耦合
特色:
1. 下降代碼的重複,提升代碼的適應性
2. 提升了代碼的合理性,更重的它突出一種思想---下降適用範圍,提升適用性。
3. 對於一個已有函數,對其約定好其中的某些參數輸入,而後生成一個更有好的、更符合業務邏輯的函數。
4. 提升針對性
5. 延遲執行(只有在最後一次才執行)
6. 固定易變因素
應用:ajax場景(ajax('method')()())
在bind方法中也應用到了柯里化:
![](http://static.javashuo.com/static/loading.gif)
柯里化函數形式的實現
我以爲柯里化函數的類型也能夠分爲多種形式
1. 只執行一次(傳入對應要執行的函數)
![](http://static.javashuo.com/static/loading.gif)
2. 根據要執行函數的形參個數判斷執行的次數(執行次數小於等於執行函數的形參個數)
![](http://static.javashuo.com/static/loading.gif)
3. 實現無限執行的累加操做(利用reduce和隱式轉換的特性)
![](http://static.javashuo.com/static/loading.gif)
反柯里化
與柯里化相反的是反柯里化,其目的是爲了擴大適用範圍,建立一個應用範圍更廣的函數。使原本只有特定對象才適用的方法,擴展到更多的對象
實現能夠讓一個對象去借用一個本來不屬於他的方法
實現形式:
![](http://static.javashuo.com/static/loading.gif)
場景:
判斷變量類型
![](http://static.javashuo.com/static/loading.gif)