考虑到javascript的单线程性,当触发同步事件时(例如对于DOM操作)当前执行的功能块被中断时会发生什么?浏览器如何知道何时/何时继续执行被中断的块?是否有某种内部添加事件循环的“指针”?我问,因为我很好奇事件循环中的其他等待事件是否可以介入同步事件处理程序的干预和正在执行的原始功能块的继续之间。
我很早就理解了异步事件/同步事件/事件循环,所以如果我有这个完全错误,请告诉我。但我的理解是同步事件(嵌套?)是“立即触发”,我已经看到它发生在jsfiddle上,标题剪切和粘贴来自该主题的教程。我只是很困惑javascript如何知道如何/从哪里去,因为它是如此异步驱动。
一个片段:
<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>
会产生'on onclick','onfocus','out onclick'。重点是同步事件。 js如何知道在“text.focus()”之后用下一个语句进行备份?它是否像框架堆栈那样简单?
答案 0 :(得分:1)
所有内置事件都是异步的,但是如果要在代码中触发同步事件,它将像任何常规函数调用一样,一旦完成就会返回。没有事件突然中断执行代码 - 很好地按下&#34;停止执行&#34;在开发人员工具中实际上是这样做的,因为编译的代码在每个函数和循环中都会检查它。