什麼是函數柯里化
柯里化一般也稱部份求值,其寄義是給函數分步通報參數,每次通報參數後部份運用參數,並返回一個更詳細的函數接收剩下的參數,這中心可嵌套多層如許的接收部份參數函數,直至返回末了效果。
因而柯里化的歷程是逐漸傳參,逐漸減少函數的適用範圍,逐漸求解的歷程。
個人理解為在函數傳實行時函數並不計算效果,而是返回一個新的函數,這個新的函數已內置了之前的參數,在須要計算效果時再返回效果。
柯里化完成
通用的柯里化函數
var curry = function (fn) {
//應用閉包來保留參數
var _args = [];
return function () {
//假如參數為0返回計算效果
if (arguments.length === 0) {
return fn.apply(this, _args);
}
//否則將參數增加到_args中並返回當前函數
[].push.apply(_args, arguments);
return arguments.callee;
}
};
柯里化一個乞降函數
var add = curry(function () {
return [].reduce.call(arguments, function (a, b) {
return a + b;
})
});
add(2, 4);
add(4);
add(2, 3, 45);
//此時函數並未實行加法運算,只是保留了增加的參數
add();
//這裏實行了加法運算,返回計算效果60