Есть ли в 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!

Ссылка: Тайм-ауты и интервалы

Другие вопросы по тегам