你newFun
函數每次調用時調用傳遞函數的兩倍。你應該使用一個變量並對函數調用進行計數。
下面的函數檢查函數調用的次數,並返回0
當函數被調用兩次。
function twice(func, exceededReturnValue) {
// the following variable is local to the `twice` function
var called = 0;
// return a function that *remembers* the declared variable
return function() {
if (called == 2) {
console.warn('the function has already been called twice');
return exceededReturnValue;
}
called++;
return func();
}
}
var allReturns = twice(function() {
return 4
}, 0);
在JavaScript中一個 「功能[即]返回一個函數」 被稱爲閉合。
萬一傳進來的函數應該接受的參數,你可以用它代替調用運營商.apply
方法:
return func.apply(null, arguments);
// ...
var allReturns = twice(function(foo) {
return 4 * (foo || 1);
}, 0);
// allReturns(8) + allReturns(3);
你的第一個段落的最後一句如果函數被調用3次未完成:) – Aaron