Do Javascript事件处理程序块
Do Javascript event handlers block?
(具体来说,我使用的是骨干模型事件)
有人能帮我理解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的演讲。
希望这能有所帮助。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在jQuery事件处理程序中存储和重用超时
- 无法在 blueimp 文件上传插件的“文件上传块完成”事件处理程序上中止上传
- 如何为范围滑块创建事件处理程序
- Do Javascript事件处理程序块
- 不能使用off()关闭动态列表事件处理程序的事件处理程序(jquery)
- 触发在不同代码块中分配的jQuery事件处理程序