Javascript事件处理程序是否阻止?

ugl*_*nky 3 javascript events synchronization backbone.js

(具体来说,我正在使用Backbone Model事件)

有人可以帮我理解javascript事件是如何工作的吗?以下是不按我预期的方式工作,这让我感到困惑:

在骨干网中,我对我的模型进行了更改,之后我立即运行了一些代码:

var myVar;
myModel.set('someAttr', true);  // Change my model
myVar = executeSomeFunc();  // Now run some code
Run Code Online (Sandbox Code Playgroud)

然后在我的代码库中的其他地方我监听事件并处理它(在我的情况下,我用一个集合包装这个模型):

myCollection.on('change:someAttr', changeHandler);  // Listen for the event
Run Code Online (Sandbox Code Playgroud)

我发现的是,myVar = executeSomeFunc()直到事件上的所有事件处理程序change:someAttr都完成后才会执行.(我通过将一个耗时的事件处理程序附加到事件上来检查)

这是预期的行为吗?

bha*_*lin 5

是.JavaScript不是多线程的.触发事件时,将立即执行所有事件处理程序.

  • 我错了!(产生的唯一方法是setTimeout).至于事件处理程序的同步性,这解释得非常彻底(似乎答案是"它取决于"):http://javascript.info/tutorial/events-and-timing-depth (3认同)