JavaScriptでonload時にp要素のinnerHTMLを変更できません
Q&A
Closed
解決したいこと
プログラミング初心者でJavaScriptの初歩的な学習をしています。
ページ読み込み時にp要素の値を換えようとしたところエラーが発生しています。
原因を教えていただきたいです。
発生している問題・エラー
Uncaught TypeError: Cannot set property 'innerHTML' of null
該当するソースコード
<script>
var myfunc = function(){
document.getElementById("p").innerHTML = "test";
};
window.onload = myfunc();
</script>
<p id="p"></p>
自分で試したこと
innerHTMLプロパティが無いみたいなエラーだと思い、p要素が読み込まれる前にinnerHTMLを参照していることが原因だと考え、p要素の下にscript要素を記述した所意図した動作になりました。
(まずはこの理解があっているのか知りたいです)
<p id="p"></p>
<script>
var myfunc = function(){
document.getElementById("p").innerHTML = "test";
};
window.onload = myfunc();
</script>
また、p要素の前にscript要素を記述した状態のまま関数を即時関数の中に入れた所、意図した動作をしました。
こちらはなぜエラーが起きないのか理解できていません。
(つぎにこのプログラムが動いている理由を知りたいです)
<script>
var myfunc = function(){
document.getElementById("p").innerHTML = "test";
};
window.onload = function(){myfunc()};
</script>
<p id="p"></p>
最後に、window.onloadはページの読み込み後に実行されるものだと認識しているのですが、それならp要素は読み込まれているはずなのに、なぜエラーになってしまうのでしょうか。
(できればこの解説もしていただきたいです)
みなさまのお知恵を拝借できれば幸いです。