函數柯里化
- 概念 - 調用另一個函數併爲它,參數1:傳入柯里化的函數 參數2:其他參數,要傳入的值
- 功能 - 參數複用 延遲執行
- 案例:curry 創建柯里化的通用公式
第一種:基本的柯里化函數
function curry (fn) {
var args = Array.prototype.slice.call(arguments, 1);
return function (...innerArgs) {
console.log(innerArgs)
var finalArgs = args.concat(innerArgs);
return fn.apply(null, finalArgs)
}
}
function add (x, y) {
return x + y
}
var result = curry(add, 1);
var result1 = result(2);
console.log(result1)
第二種:比較完善的柯里化函數
var curry = function (f) {
var len = f.length;
return function t () {
var innerLength = arguments.length,
args = Array.prototype.slice.call(arguments);
if (innerLength >= len) {
console.log(innerLength)
return f.apply(undefined, args)
} else {
return function () {
var innerArgs = Array.prototype.slice.call(arguments),
allArgs = args.concat(innerArgs);
return t.apply(undefined, allArgs);
}
}
}
}
function add (num1, num2) {
return num1 + num2;
}
var curriedAdd = curry(add);
add(2)(3);
console.log(curriedAdd(2)(3))