var timers = { //#1
timerID: 0, //#2
timers: [], //#2
add: function(fn) { //#3
this.timers.push(fn);
},
start: function runNext() { //#4
if (this.timerID) return;
(function() {
if (timers.timers.length > 0) {
for (var i = 0; i < timers.timers.length; i++) {
if (timers.timers[i]() === false) {
timers.timers.splice(i,1);
i--;
}
}
timers.timerID = setTimeout(runNext, 0);
}
})();
},
上面的代码来自John Resig的《JavaScript忍者秘籍》。我不理解的部分是他将一个函数赋给了
start
的属性,然后将该函数命名为runNext
。请问有人能提供一些澄清吗?
setTimeout(runNext, 0)
调用引用了这个函数,如果这个函数是完全匿名的,就无法使用该调用。 - Eric JablowsetTimeout
中也再次被调用,也许解析本地函数名比解析timers.start
更快? - Mike Christensenthis.start
怎么样? - zerkms