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);
}
})();
},
Код указан от Секреты JavaScript Ninja от John Resig. часть, которую я не понимаю, это то, где он присваивает функцию свойству start
, а затем имена, которые функционируют runNext
. Может кто-нибудь, пожалуйста, предложите некоторые разъяснения?Какова цель присвоения имени функции, являющейся значением свойства в объекте?
Насколько я знаю, это обычно для отладки, особенно для предотвращения анонимных функций в трассировке стека во время ошибок. – Joseph
Чтобы функция вызывала себя, ей нужно имя. Вызов 'setTimeout (runNext, 0)' относится к функции, которую она не может выполнить, если функция полностью анонимна. –
Он также снова вызывается в 'setTimeout', возможно, решение локального имени функции выполняется быстрее, чем разрешение' timers.start'? –