/** * 当发现正在调用同一个函数,并且传递的参数绝大多数都是相同的, * 那么该函数可能是用于Curry化的一个很好的候选参数 */ ;(function() { function add(x, y) { if (typeof y === 'undefined') { return function(y) { return x + y } } return x + y } console.log(add(1)(3)) }()) ;(function() { function schonfinkelize(fn) { var slice = Array.prototype.slice var stored_args = slice.call(arguments, 1) return function() { var new_args = slice.call(arguments) var args = stored_args.concat(new_args) return fn.apply(null, args) } } function add(x, y) { return x + y } console.log(schonfinkelize(add, 4)(5)) })()