function curryingAdd(){ //数组保存所有参数 var args = [arguments[0]] //利用闭包收集所有参数 var adder = function(){ if(arguments[0] !== undefined){ args.push(arguments[0]) } return adder } // 利用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回 adder.toString= function () { return args.reduce(function (a, b) { return a + b; }); } return adder } console.log(curryingAdd(1)(2)(4)(5)())