var a = true;
setTimeout(function() {
console.log(123);
a = false;
}, 3000);
while (a)
console.log(123);
那是因为js是单线程机制,只有主线程执行完成后才会执行定时器中的代码。
而你是while(true)死循环,所以浏览器的主线程一直被占用着,无法分身执行定时器。这个死循环直接把浏览器给弄崩溃了。
js在遇到定时器的时候会把定时器延时事件推入 Javascript 事件队列,执行下面的代码, 当代码执行完了以后,再执行事件队列中定时器里面的代码。