也不知道何時身邊問這個題目的人多了起來,內部討論的時候也說到這個問題,javascript
(柯里化函數編程)這種函數編程模式感受就是多個參數變爲單一參數連續傳入的鏈式操做。java
<!--普通函數-->
function add(a,b) {
return a + b
}
<!--柯里化函數-->
function add(a){
return function(b) {
return a + b
}
}
這樣參數就能夠連續調用
複製代碼
Function.prototype.bind = function(context) {
var me = this;
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return me.apply(contenxt, finalArgs);
}
}
複製代碼
其實寫的很差有興趣的去MDN bind實現的代碼實現吧編程
就是將各類鏈式操做反饋成一個傳參app
function uncurrying(fn) {
return function(...args) {
var ret = fn;
for (let i = 0; i < args.length; i++) {
ret = ret(args[i]); // 反覆調用currying版本的函數
}
return ret; // 返回結果
};
}
複製代碼