JavaScript 記述場所・実行順
JavaScriptの記述
記述する場所
- head要素の中
- body要素の中
- bodyタグの閉じタグの直前
HTMLへのスクリプトの埋め込み
<script>
と</script>
の間に記述する … インライン スクリプト- HTML5の場合はデフォルトのtype属性がJavaScriptなのでtype属性 (type="text/javascript")を特別記載する必要はない
bodyタグの閉じタグの直前にscriptタグを記述するのが一般的
- すべてのブラウザではJavaScriptを読み込んで処理している間は他のレンダリング(HTML要素の読み込み)を中断するという処理になっているから
<script> // ここにスクリプトを記述 </script>
<script>
のsrc属性に指定して、外部ファイルから読み込む … 外部スクリプト- インラインの時と同じようにbodyタグの閉じタグの直前に書くというのが一般的
<script src="./sample.js"></script>
- イベントハンドラとして、要素のonclick属性などに記述する
<a href="javascript:(ここにスクリプトを記述)">クリック</a> <input type="button" value="Click!" onclick="ソース記入">
- | 直接 | 外部 |
---|---|---|
メリット | 読み込みが早い | HTMLとJavaScriptが分離され再利用しやすい、管理しやすい |
デメリット | HTMLとJavaScriptが混在しコードが乱雑になる、管理しにくい | ファイルが増えると、読み込みが遅くなる |
記述する場所によってエラーになる
<head> <script> var memo = document.getElementById(‘memo’); memo.textContent = ‘こんにちは!’; </script> </head> <body> <p id=”memo”></p> </body>
上記のコードは「pタグ」が存在していないのに文字列を代入しようとしているためエラーとなる。
JavaScriptの実行
すべてのDOMツリー構造及びCSS・画像などの関連リソースが読み込まれたあとにJavaScriptが実行されるようにする方法
window.onload = function() { // 実行したい処理 }
- head要素内でDOMを扱うプログラムを書いてもエラーにはならない
※ 複数の「onloadイベント」書いてしまうと上書きされてしまい、最後に書いたイベントだけが実行される →複数人でプログラムを書いている場合に誤って「onloadイベント」を上書きしてしまうリスクがあるので注意が必要
window.addEventListener('load', function() { // 実行したい処理 })
$(window).on('load', function() { //実行したい処理 });
- この書き方だと複数の「onloadイベント」を登録してもすべて実行される
DOMの「ツリー構造」が完了した時点で実行される方法
window.addEventListener('DOMContentLoaded', function() { // 実行したい処理 })
$(document).ready(function(){ // 実行したい処理 }); $().ready(function(){ // 実行したい処理 }); $(function(){ // 実行したい処理 });
まとめ
- 記述する場所に気をつける
- JavaScriptの実行順を考える
- window.onloadは上書きされる
参考
【JavaScript基礎】JavaScriptの実行順序について - KDE BLOG
JavaScriptの記述場所 | JavaScript入門編 - ウェブプログラミングポータル
【JavaScript】記述方法別の実行タイミングについて - Qiita
ブラウザのアドレスバーからJavaScriptのコードを実行する方法 (JavaScript疑似プロトコル)
【備忘録】ページの各読み込みタイミングにスクリプトを実行する方法まとめ【javascript】 - Qiita
ページ読み込み時のJavaScriptの実行タイミング - ばしぶろ
なぜhead要素内で外部JavaScriptファイルを読み込むのが良くないのか?
jQueryの読込み「ready」と「load」と「function」の順番について | web-wizardry
【JavaScript】window と document の違い
【JavaScript入門】onloadイベントの使い方とハマりやすい注意点とは | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト