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

Why does alert(); run before console.log();

我的问题与其他问题有何不同

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

问题

为什么 alert(); 运行 在 console.log(); 之前?我可以做到 console.log();alert(); 之前执行吗?

我的代码

console.log("Hello!");
alert("Hi!");
console.log("Hello!");
setTimeout(() => alert("Hi!"), 0);

基本上:console.log() 技术上首先被调用。 然而,浏览器实际上重新绘制自己或控制台更新也需要一点时间。不过,在它可以自我更新之前,alert() 已经触发,即 "stop everything before I'm confirmed"。所以发送到 console.log 的消息已发送,但视觉确认不及时。

在 0 秒 setTimeout 中包装一些东西是告诉 JavaScript "hey call me immediately after everything is finished running & updating."

的老把戏

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

检查下面的测试,在 window.alert 函数触发之前,它将 return 从 for 循环的 999 循环开始。就我而言,我没有看到 window.alert。这是因为实际上警报在 console.log 的函数循环之后运行。

// Test function
const test = (br) => {
  for (let i = 0; i < 1000; i++) {
    console.log(i);
    // If br true and cycle #999 - return before
    // loop end and window.alert exec
    if(br && i === 999) return;
  }
  window.alert('Hello World!');
};

// Test
test(true);