其實這也算一道面試題吧,筆者曾經被提問過,惋惜當時沒能答上來。。。 💔 如今來研究一下吧。面試
這個問題有兩個重點,一是無限調用;二是累計結果。首先,累計結果比較簡單,用閉包實現便可。難點在於無限調用。
關於無限調用,一開始是想重複調用函數自身,可是在何時中止呢?想了許久沒找到合適的點;後來轉了一下思路,仍是重複返回函數自身,經過改寫.toString方法來返回累計結果。閉包
//實現一個累加的函數 var add = (function(){ var total = 0; function _add(){ if(arguments[0]){ total += arguments[0]; return _add; } } //關鍵 _add.toString = function(){ var result = total; total = 0; return result; }; return _add; })() add(1)(2)(3) //6