JavaScript 文件的初始运行

Initial run through of a JavaScript file

本文关键字:运行 文件 JavaScript      更新时间:2023-09-26

在Javascript中,每当调用异步操作/事件时,都会创建一个消息以及操作/事件的回调函数(仅在操作/事件完成后运行的函数)。

当操作/事件完成(或触发)时,消息将移动到消息队列中。此消息队列不断轮询(此轮询称为"事件循环"),当在队列中找到消息时,消息的回调将放在调用堆栈上并运行。然后,我们返回到事件循环,要么等待新消息,要么抓取队列中的下一条消息并运行其回调。

我的问题是:在所有这些之前,当 JavaScript 文件首次运行时,在事件循环启动之前,所有内容是否都在同一个调用堆栈上运行?

这是一个非常有趣的问题。毫无疑问,有人会提供更好的解释,因为我不完全了解发生了什么,但根据我的测试,我确定你的问题的答案是否定的。

以以下代码为例:

alert( 'start' );
var cats = document.getElementById( 'cats' );
cats.addEventListener('click', function() {
    alert( 'cats' );
});
cats.click();
alert( 'finish' );

警报按如下方式触发:startcatsfinishcats出现在finish之前的事实证明消息是在执行代码时添加到事件循环中的,而不是在执行代码之后。

http://jsfiddle.net/3bm2pz86/