У меня есть следующий кодПочему SetTimeout звонки сделать различный результат
setTimeout(function() {
setTimeout(function() {
console.log('foo');
}, 50);
}, 100);
setTimeout(function() {
setTimeout(function() {
console.log('baz');
}, 100);
}, 50);
Вопрос заключался в том, что это выход. Но при запуске кода у меня разные результаты на нескольких тиражах - иногда это foo baz
, иногда это baz foo
.
Итак, есть два вопроса:
1) почему у меня есть разные результаты?
2) Почему иногда я получаю baz foo
?
P.S. Есть фрагмент кода, но с фрагментом кода я всегда получаю тот же результат P.P.S. Если это специфическая среда - я использую Chrome (и FF), но вопросы по-прежнему актуальны P.P.S. Возможный ответ об использовании console.log
, но
var a = [];
setTimeout(function() {
setTimeout(function() {
a.push('foo');
}, 50);
}, 100);
setTimeout(function() {
setTimeout(function() {
a.push('baz');
}, 100);
}, 50);
setTimeout(function() { console.log(a); }, 300);
его до среды javascript, чтобы правильно расположить объекты на бэкэнд. оба кажутся действительными ответами –
setTimeout не назначает события после указанного времени EXACT - его приближение, которое используется механизмом javascript для планирования ваших функций как можно ближе к указанному вами времени. В общем, вы не должны полагаться на таймауты, чтобы гарантировать порядок исполнения. Читайте в очереди событий javascript для получения дополнительной информации. – matmo
@SpencerWieczorek я имел в виду его реализацию. –