質問: document.getElementById("piyo"); el.addEventListener("keydown", function(){ console.log(this); }, false); } document.addEventListener("DOMContentLoaded", test, false); ```
回答: `async` は、「スクリプトのロードで本体HTMLのパーズをブロックしない」「スクリプトのロードが終わったら実行される」という挙動です。スクリプト実行時にHTMLのパーズは終わっているかもしれませんし、終わっていないかもしれません。このコードで`async`を使いたいのでしたら、「`document.readyState`が `"loading"` の場合は `DOMContentLoaded` に `test` を登録、それ以外は `test` を即実行。」となるでしょう。 欲しい挙動は `async` ではなく `defer` ではないでしょうか。