源于Codewar上的一道題
A Chain adding function
function add(n){
var sum = n;
var tmp = function(m){
sum += m;
return tmp;
}
tmp.toString = function(){return sum};
return tmp;
}
首先要一個數記住每次的計算值,所以使用了閉包,在tmp中記住了n的值,第一次調用add(),初始化了tmp,并將n保存在tmp的作用鏈中,然后返回tmp保證了第二次調用的是tmp函數,后面的計算都是在調用tmp, 因為tmp也是返回的自己,保證了第二次之后的調用也是調用tmp,而在tmp中將傳入的參數與保存在作用鏈中n相加并付給sum,這樣就保證了計算。
但是在計算完成后還是返回了tmp這個函數,這樣就獲取不到計算的結果了,需要的結果是一個計算的數字那么怎么辦呢?首先要知道JavaScript中,打印和相加計算,會分別調用toString或valueOf函數,所以重寫tmp的toString方法,返回sum的值。