函数柯里化(Function Currying)又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包里被保存起来。待到函数真正需要求值的时候,之前传入的参数都会被一次性用于求值。
代码:
<script type="text/javascript">
var curry = function(fn){
var args = [];
return function(){
if(0 === arguments.length){
return fn.apply(this, args);
}
Array.prototype.push.apply(args, arguments);
return fn;
}
};
var sum = curry(function(){
var total = 0;
for (var i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
});
sum(100);
sum(200);
sum(700);
console.log(sum());
</script>
结果:
js.html:31 total: 1000