Я смотрю на некоторый существующий код в веб-приложении. Я видел это:
window.setTimeout (function () {...})
Это то же самое, что просто выполнить содержимое функции сразу?
Она не обязательно запустится сразу, равно как и явно установить задержку на 0. Причина в том, что setTimeout удаляет функцию из очереди выполнения, и она будет вызываться только после того, как JavaScript завершит текущую очередь выполнения.
console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2
подробнее см. http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/
Вы пропустили миллисекундный параметр...
setTimeout(function() { /*something*/ }, 0);
0 устанавливает задержку равной 0, но на самом деле это позволяет вашей функции "прыгнуть в очередь" списка выполнения браузера. У браузера есть куча вещей, таких как рендеринг объектов на странице, и, вызывая это, ваша функция запустится, как только у браузера будет несколько циклов.
Существует минимальная задержка, которую использует setTimeout
(4 мс согласно HTML5, Firefox 3.6 использует 10 мс). На странице документации Mozilla Developer Center есть обсуждение по этому поводу.