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

时间:2017-11-05 22:10:05

标签: javascript console.log alerts

我的问题与其他人的不同

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

问题

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

我的代码

console.log("Hello!");
alert("Hi!");

2 个答案:

答案 0 :(得分:5)

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

基本上:在技术上首先调用console.log() 但是,浏览器实际上重新绘制自己或控制台更新也需要一些时间。在它可以自我更新之前,alert()已经触发,其中表示"在我确认"之前停止一切。因此,发送到console.log的消息,但视觉确认不及时。

在0秒内收集一些东西时间输出是告诉JavaScript的一个老技巧"在所有内容运行完毕后,他立即打电话给我 。更新"

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

答案 1 :(得分:1)

检查下面的测试,它将在window.alert函数触发之前的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);