O que setTimeout está fazendo quando definido como 0 milissegundos?

Em JavaScript,setTimeout(callback, delay) significa "ligarcallback depois dedelay milissegundos ". Mas e sedelay é0? Deveria ligarcallback Imediatamente?

Estou confuso por causa do que vejo quando executo o seguinte código:

setTimeout(function() { 
    console.log('AAA');
}, 0); // Call this in 0 milliseconds 

for (i = 0; i < 1000; i++) {
    console.log('BBB'); 
}
for (i = 0; i < 1000; i++) {
    console.log('CCC'); 
}
for (i = 0; i < 1000; i++) {
    console.log('DDD'); 
}
for (i = 0; i < 1000; i++) {
    console.log('EEE'); 
}

Isso registra o seguinte no console:

Eu esperava verAAA logado muito antes disso. Houve tempo para executar outras 4000 chamadas paraconsole.log antes de uma função que deveria ter sido chamada imediatamente.

Alguém pode explicar o quesetTimeout está fazendo quando o atraso é definido como 0 milissegundos?

questionAnswers(1)

yourAnswerToTheQuestion