質問事項
JavaScript初学者です。
addEventListenerにて定義した処理(イベントリスナー)の実行タイミングを理解しようと以下のコードを実行したのですが、実行結果が想定と異なりました。原因はなんでしょうか。。。
該当のソースコード
JavaScript
1document.getElementById("btn").addEventListener("click",function () { 2 var xhr = new XMLHttpRequest(); 3 4 xhr.addEventListener("readystatechange",function () { 5 console.log("readyState:" + xhr.readyState); 6 },false) 7 8 console.log("1.Open前"); 9 xhr.open("GET", "scripts/book.xml"); 10 console.log("2.Open後,Send前"); 11 xhr.send(null); 12 console.log("3.Send後"); 13 14 }, 15 false 16 );
・ボタン押下時にXMLHttpRequestを実行
・XHLHttpRequestのreadystateが変化したタイミングでイベント実行
想定した結果
イベント発火によるイベントリスナーはsetTimeoutのように、WebAPIによってタスクキューに入ってからコールスタックに入ると理解しているので、イベントリスナーは最後に行われると思ってました。
console
11.Open前 22.Open後,Send前 33.Send後 4readyState:1 <=Openの時のイベント処理 5readyState:2 6readyState:3 7readyState:4
実際の結果
実際には、同期処理である「console.log("2.Open後,Send前");」の処理よりも先に、Openによるイベントリスナーが動作しています。
console
11.Open前 2redyState:1 <=Openの時のイベント処理 32.Open後,Send前 43.Send後 5redyState:2 6redyState:3 7redyState:4
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/11 04:06
2021/03/11 04:46