原生JS實現add(1)(2)(3)(4)的調用方式


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 會返回函數和函數執行的結果,勞資兩種方法都試了,還嘗試了立即執行函數都沒有搞好。尼瑪,就是少了這個玩意,生氣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM