method 1:
var add = function (m) { var temp = function (n) { return add(m + n); } temp.toString = function () { return m; } return temp; }; add(3)(4)(5); // 12 add(3)(6)(9)(25); // 43
method 2:
function add(x) { var sum = x; var tmp = function (y) { sum = sum + y; return tmp; }; tmp.toString = function () { return sum; }; return tmp; } console.log(add(1)(2)(3)); //6 console.log(add(1)(2)(3)(4)); //10
牛逼了,考查遞歸調用或者閉包,js基礎功能
利用函數的柯里化也是可以實現的,參考柯里化小結
method 3:利用了函數的柯里化和閉包特性
1 function add(...arg) { 2 var a = [...arg]; 3 _add = function (...innerArg) { 4 if (innerArg.length === 0) { 5 return a.reduce(function (a, b) { return a + b }) 6 } else { 7 [].push.apply(a, innerArg) 8 return _add; 9 } 10 } 11 return _add 12 } 13 14 add(1)(2)(3)() // 6
Tooltip:console, alert return 會返回函數和函數執行的結果,勞資兩種方法都試了,還嘗試了立即執行函數都沒有搞好。尼瑪,就是少了這個玩意,生氣