Javascript 为什么警报();在console.log()之前运行;

Javascript 为什么警报();在console.log()之前运行;,javascript,console.log,alerts,Javascript,Console.log,Alerts,我的问题与其他问题有何不同 我正在使用ES6语法。我研究的其他问题使用ES5语法 问题 为什么alert()runbeforeconsole.log()?我可以使它成为console.log()在警报()之前执行 我的代码 console.log("Hello!"); alert("Hi!"); 基本上:从技术上讲,首先调用console.log()。†但是,浏览器实际上需要重新绘制自身或控制台更新也需要一些时间。在它能够自我更新之前,alert()已经触发,它说“在我确认之前停止一切”。因此

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

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

问题

为什么
alert()
runbefore
console.log()?我可以使它成为
console.log()
警报()之前执行

我的代码

console.log("Hello!");
alert("Hi!");
基本上:从技术上讲,首先调用console.log()。†但是,浏览器实际上需要重新绘制自身或控制台更新也需要一些时间。在它能够自我更新之前,alert()已经触发,它说“在我确认之前停止一切”。因此,将消息发送到console.log,但视觉确认不及时

在0秒的setTimeout中包装一些东西是一个老把戏,告诉JavaScript“在所有东西都运行和更新完成后立即给我打电话。”



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

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

//测试函数
常数测试=(br)=>{
for(设i=0;i<1000;i++){
控制台日志(i);
//如果br为true并循环#999-在
//循环结束和窗口。警报执行
如果(br&&i==999)返回;
}
window.alert('Hello World!');
};
//试验

测试(正确)
console.log
可能实现为异步运行,这取决于您运行的环境能否将其异步翻译为英语?我的意思是“异步”或“异步”哦,好的,那么我应该在什么环境下运行此代码?这个问题没有正确的答案,也许我应该询问您当前运行的环境,并在该环境中找到解决方案。我如何使
alert()5秒后再来?@SantaticHacker如果你想要的话,那么你只需要使用
设置超时
,但是,好吧,为了它的预期用途-而不是我们上面所做的这种骇人的副作用。因此,将其更改为
setTimeout(()=>alert(“Hi!”),5000)(setTimeout的第二个参数是执行前等待的毫秒数。)哦,我以为这个数字是以秒为单位的。无论如何,谢谢你。
console.log("Hello!");
setTimeout(() => alert("Hi!"), 0);