为什么从无限while循环内部调用时不会调用setTimeout

sou*_*der 2 javascript infinite-loop settimeout

我遇到了一个有趣的问题,我试图从一个infite循环中调用一个函数(它的体内有一个setTimeout),它从来没有被调用过,但是当循环变为infite时,调用正在发生!

这工作: -

var bar = function() {
    setTimeout(function() {
        console.log("1");
    }, 0);
};

var count = 4;
while(count > 0){
  bar();
  count --;
}
Run Code Online (Sandbox Code Playgroud)

这永远不会奏效.: -

var bar = function() {
  setTimeout(function() {
    console.log("1");
  }, 1000);
};

while (true) {
  bar();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这里发生的事情!如何从无限循环中调用其体内setTimeout的函数?

Mar*_*yer 7

这是因为事件循环的工作方式.超时等异步事件排队等待,并脚本主体运行完成后进行处理.这意味着while在evens开始查看setTimeout回调之前,它正在等待你的循环完成.这是为什么你不想用javascript中的巨型循环等长期运行的同步代码阻塞线程的原因之一.当你的无限while循环旋转时,别的什么都不会发生.