ホームページ  >  記事  >  ウェブフロントエンド  >  関数の宣言と式は JavaScript の実行順序にどのように影響しますか?

関数の宣言と式は JavaScript の実行順序にどのように影響しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 18:35:47157ブラウズ

How Do Function Declarations and Expressions Affect Execution Order in JavaScript?

JavaScript 関数の宣言と評価順序

JavaScript 関数を使用する場合、関数の宣言と式の区別とその影響を理解することが重要です。執行命令について。これは、4 つの例を調べることで説明できます。

// 1
(function() {
    setTimeout(someFunction1, 10);
    var someFunction1 = function() { alert('here1'); };
})();

// 2
(function() {
    setTimeout(someFunction2, 10);
    function someFunction2() { alert('here2'); }
})();

// 3
(function() {
    setTimeout(function() { someFunction3(); }, 10);
    var someFunction3 = function() { alert('here3'); };
})();

// 4
(function() {
    setTimeout(function() { someFunction4(); }, 10);
    function someFunction4() { alert('here4'); }
})();

最初の例は、コンパイルと実行の順序が原因で機能しません。 JavaScript では、コードはコンパイルと実行の 2 つのフェーズでコンパイルされます。

フェーズ 1: コンパイル

コンパイル中に、変数が作成されます。例 1 では、setTimeout 呼び出しの後に someFunction1 変数が宣言されています。したがって、コンパイラーが setTimeout 引数で someFunction1 を検出した場合、変数を見つけることができません。

フェーズ 2: 実行

実行中に、インタープリターは someFunction1 の値を渡します。タイムアウトを設定します。 someFunction1 変数がまだ未定義であるため、インタプリタは関数の実行に失敗します。

対照的に、例 2、3、および 4 はすべて機能します。これは、関数宣言が setTimeout 呼び出しの前に定義されているため (例 2)、または、匿名関数が setTimeout に渡されるか (例 3)、宣言された関数への参照が使用されます (例 4)。

関数宣言と関数式

関数宣言と式の違いを理解することが重要です。関数宣言 (例 2 など) はコンパイル中に解析され、関数式 (例 1 および 3 など) は実行中に評価されます。この違いは、変数へのアクセスとコードの実行順序に影響を与える可能性があります。

以上が関数の宣言と式は JavaScript の実行順序にどのように影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。