使用閉包的方式實現一個累加函數 addNum,參數為 number 類型,每次返回的結果 = 上一次計算的值 + 傳入的值,如: addNum(10); //10 addNum(12); //22 addNum(30); //52 寫法一 寫法二 寫法三 ...
使用閉包的方式實現一個累加函數 addNum,參數為 number 類型,每次返回的結果 = 上一次計算的值 + 傳入的值,如: addNum(10); //10 addNum(12); //22 addNum(30); //52
寫法一
1 function sum(numberOne) { 2 var count = numberOne; 3 return function by(numberTwo) { 4 if (numberTwo === undefined) { 5 return count; 6 } else { 7 count += numberTwo; 8 return by; 9 } 10 } 11 } 12 console.log(sum(10)(12)(30)());
寫法二
1 function sum(x) { 2 var result = 0; 3 for(var i=0;i<arguments.length;i++){ 4 result += arguments[i]; 5 } 6 var foo = function(){ 7 for(var i=0;i<arguments.length;i++){ 8 result += arguments[i]; 9 } 10 return foo; 11 }; 12 foo.toString = function(){ 13 return result; 14 }; 15 return foo; 16 } 17 18 console.log(+sum(10)(12)(30));
寫法三
1 function sum (n) { 2 3 var v = function (x) { 4 return sum (n + x); 5 }; 6 7 v.valueOf = v.toString = function () { 8 return n; 9 }; 10 11 return v; 12 } 13 14 console.log(+sum(10)(12)(30));