我试图将一个计时器变量移动到一个闭包中,就像这个
一样var varEndAndStartTimer = (function() {
var timer; // persisted in closure
return function() {
if (timer) clearInterval(timer);
timer = setInterval(doIt, 500);
};
})();
var theTimer;
function startIt() {
function endAndStartTimer() {
if (theTimer) clearInterval(theTimer);
theTimer = setInterval(doIt, 500);
}
endAndStartTimer();
}
如果我调用函数endAndStartTimer
,事情就像我期望的那样起作用。如果我改为呼叫varEndAndStartTimer
某些循环。
代码当然有点复杂,我甚至无法确切地知道它是如何循环的。但代码的唯一区别在于上述差异。
这些版本不应该完全相同吗? (varEndAndStartTimer
是在调用startIt
时定义的。)
更新 上面的所有代码都在匿名函数中,只调用一次(在声明中)。
可以调用window["callStartIt"] = function() { startIt(); }
形式的链接。我认为它在这里被称为,但我现在不确定。
也许不允许这样的结构?