我的问题与其他人的不同
我正在使用ES6语法。我看过的其他问题使用ES5语法。
问题
为什么alert();
在console.log();
之前运行?我可以这样做,以便在console.log();
之前执行alert();
吗?
我的代码
console.log("Hello!");
alert("Hi!");
答案 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);