JavaScriptでは、関数の記述順序は実行順序に影響しません。
これは、JavaScriptが関数を“hoisting”(ホイスティング) という仕組みで扱うためです。
ホイスティングとは、簡単に言うと、 関数宣言と変数宣言が、コードの実行前にコードの先頭に “持ち上げられる” ようなイメージです。
つまり、関数の定義が呼び出しよりも後になっていても問題なく動作します。
サンプルコード
例1: 関数内での関数呼び出し
function greet(name) {
sayHello(); // sayHello関数を呼び出す
console.log("こんにちは、" + name + "さん!");
}
function sayHello() {
console.log("Hello!");
}
greet("太郎");
// 出力:
// Hello!
// こんにちは、太郎さん!
content_copy Use code with caution.JavaScript
例2: 別ファイルの関数呼び出し
HTMLファイル (index.html)
<script src="functions.js"></script>
<script src="main.js"></script>
content_copy Use code with caution.Html
functions.js
function sayHello() {
console.log("Hello from functions.js!");
}
content_copy Use code with caution.JavaScript
main.js
sayHello(); // functions.js内の関数を呼び出す
content_copy Use code with caution.JavaScript
これらの例では、関数の呼び出しが定義よりも前に記述されていますが、問題なく動作します。
注意点
- 関数式の場合: const myFunc = function() {} のような関数式の場合、ホイスティングは変数に対してのみ適用されます。 関数式自体は、定義された場所まで実行されません。
- 変数のホイスティング: 変数の場合は、宣言のみがホイスティングされ、初期化は行われません。 つまり、宣言前に変数を参照しようとすると、undefined となります。
まとめ
JavaScriptでは、関数宣言の記述順序は実行順序に影響しません。
しかし、関数式や変数のホイスティングには注意が必要です。
コードを読みやすく、予期せぬエラーを防ぐためにも、関数や変数は使用する前に定義する習慣をつけると良いでしょう。