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

时间:2012-03-28 00:34:47

标签: javascript events synchronization backbone.js

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

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

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

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

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

myCollection.on('change:someAttr', changeHandler);  // Listen for the event

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

这是预期的行为吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

javascript块中的所有内容,只取决于何时。如果您将处理程序设置为其他函数,则为处理程序触发事件并运行其他函数,它将按照我枚举它们的确切顺序执行。事件处理程序的要点是在触发某些内容时执行代码,但它永远不会是异步的。所以答案就是,这是预期的行为。要了解javascript的天堂和地狱,只需搜索Crockford关于javascript的演讲。

希望这有帮助。