考虑到JavaScript的单线程性,当触发同步事件时(例如DOM操作)当当前执行的函数块被中断时会发生什么?浏览器如何知道在哪里/何时继续执行被中断的块?是否有某种内部添加的“指针”到事件循环?我问是因为我'我很好奇事件循环中的其他等待事件是否可以在同步事件处理程序的干预和正在执行的原始功能块的继续之间进行干预。
我对异步事件/同步事件/事件循环的理解还很初级,所以如果我完全理解错了,请告诉我。(嵌套?)是“立即启动”,我看到它发生在jsfiddle与标准剪切和粘贴从教程的主题。在哪里拿起它离开的地方,因为它是如此异步驱动。
一个片段:
<input type="button" value="click me">
<input type="text">
<script>
var button = document.body.children[0]
var text = document.body.children[1]
button.onclick = function() {
alert('in onclick')
text.focus()
alert('out onclick')
}
text.onfocus = function() {
alert('onfocus')
text.onfocus = null //(*)
}
</script>
将产生'in onclick','onfocus','out onclick'。焦点是一个同步事件。js是如何知道在text.focus()
之后用next语句恢复的?它是像帧堆栈一样简单的东西吗?
1条答案
按热度按时间blpfk2vs1#
所有的内置事件都是异步的,但是如果你在代码中触发一个同步事件,它的工作方式就像任何常规的函数调用一样,一旦完成就返回。没有事件会突然中断执行代码--在开发人员工具中按下“停止执行”实际上会中断,因为编译后的代码在每个函数和循环中都有检查。