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>
「in onclick」、「onfocus」、「out onclick」を生成します。フォーカスは同期イベントです。js は、「text.focus()」の後の次のステートメントで元に戻ることをどのように知っていますか? フレームスタックで何かが行われているのと同じくらい簡単ですか?