Do Javascript事件处理程序块

Do Javascript event handlers block?

本文关键字:程序块 事件处理 Javascript Do      更新时间:2023-09-26

(具体来说,我使用的是骨干模型事件)

有人能帮我理解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事件上的所有事件处理程序都完成激发后才执行。(我通过在事件上附加一个耗时的事件处理程序进行了检查)

这是预期的行为吗?

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

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

希望这能有所帮助。