初始运行JavaScript文件

时间:2015-01-06 04:10:04

标签: javascript javascript-events callstack event-loop

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

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

我的问题是:在所有这些之前,当首次运行JavaScript文件时,在事件循环启动之前一切都在同一个callstack上运行吗?

1 个答案:

答案 0 :(得分:1)

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

采用以下代码示例:

alert( 'start' );

var cats = document.getElementById( 'cats' );

cats.addEventListener('click', function() {
    alert( 'cats' );
});

cats.click();

alert( 'finish' );

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

http://jsfiddle.net/3bm2pz86/