Есть ли в JavaScript цикл событий?
У меня есть вызов setTimeout с интервалом времени 0 мс, как показано ниже, будет ли setTimeout выполняться немедленно?
setTimeout(() => {
console.log('I am first.');
}, 0);
2 ответа
Нет!! Но он будет выполнен в кратчайшие сроки. Указанное время или задержка не является гарантированным временем выполнения, а скорее минимальным временем выполнения. Таким образом, ноль мс будет выполняться, как только стек опустеет.
SetTimeout с интервалом 0 мс не выполняется немедленно. Чтобы понять концепцию, следуйте приведенному ниже коду,
// event loop example
// setTimeouts will land in the a queue (FIFO) via WebAPI environment, which is part of the event loop
setTimeout(() => {
console.log('I am first.');
}, 0);
setTimeout(() => {
console.log('I had to wait for the other JavaScript statements and other setTimeouts with 0 ms above me, because all setTimeouts will be in a queue!');
}, 0);
setTimeout(() => {
console.log('Even, I had to wait for the other JavaScript statements and other setTimeouts with 0 ms above me, because all setTimeouts will be in a queue!');
}, 0);
// JavaScript statements land in the call stack (LIFO)
console.log('I will execute first because I am in the JavaScript environment call stack!');
Выход:
I will execute first because I am in the JavaScript environment call stack!
I am first.
I had to wait for the other JavaScript statements and other setTimeouts with 0 ms above me, because all setTimeouts will be in a queue!
Even, I had to wait for the other JavaScript statements and other setTimeouts with 0 ms above me, because all setTimeouts will be in a queue!
Ссылка: Тайм-ауты и интервалы