为什么alert(); 在console.log()之前运行;

San*_*ker 6 javascript alerts console.log

我的问题与他人有何不同

我正在使用ES6语法。我看过的其他问题使用ES5语法。

问题

为什么alert();要先运行console.log();?我可以让这个console.log();之前执行alert();

我的密码

console.log("Hello!");
alert("Hi!");
Run Code Online (Sandbox Code Playgroud)

Sam*_*mVK 5

console.log("Hello!");
setTimeout(() => alert("Hi!"), 0);
Run Code Online (Sandbox Code Playgroud)

基本上:CONSOLE.LOG()被称为第一,在技术上。但是,浏览器实际上会重新绘制自身,或者控制台更新也需要一些时间。不过,在它无法更新之前,已经触发了alert(),它说“在确认之前停止所有操作”。因此,发送到console.log的消息已发送,但视觉确认未及时进行。

在0秒的setTimeout中包装内容是一个古老的技巧,告诉JavaScript“嘿,一切运行和更新完成立即打电话给我。”


†您可以通过console.log(new Date().toString());在警报对话框之前执行类似的操作,然后等待几分钟再关闭警报,来验证此情况。请注意,它记录的是您第一次运行的时间,而不是现在的时间。