你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