(具体来说,我正在使用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
事件的所有事件处理程序都完成后才会执行。 (我通过将一个耗时的事件处理程序附加到事件上来检查)
这是预期的行为吗?
答案 0 :(得分:5)
是。 JavaScript不是多线程的。触发事件时,会立即执行所有事件处理程序。
答案 1 :(得分:1)
javascript块中的所有内容,只取决于何时。如果您将处理程序设置为其他函数,则为处理程序触发事件并运行其他函数,它将按照我枚举它们的确切顺序执行。事件处理程序的要点是在触发某些内容时执行代码,但它永远不会是异步的。所以答案就是,这是预期的行为。要了解javascript的天堂和地狱,只需搜索Crockford关于javascript的演讲。
希望这有帮助。