関数宣言と式: JavaScript における初期関数アクセスの謎を解く
直感的な外観にもかかわらず、関数を使用する機能JavaScript でのその定義が長い間開発者を当惑させる前に。次のコードを考えてみましょう:
<code class="javascript">function fooCheck() { alert(internalFoo()); // Using internalFoo() before its definition return internalFoo(); // Still using it, despite its undefined status function internalFoo() { return true; } // Finally, the definition arrives } fooCheck();</code>
不思議なことに、このコードはすべての主要なブラウザでエラーなしで実行されます。この謎を解明するために、関数の宣言と式の概念に目を向けます。
関数宣言: ホイスティングの秘密
JavaScript の ключевое слово "関数" は関数を作成します。宣言。代入である関数式とは異なり、関数宣言にはホイスティングという独特の特性があります。
ホイスティングは、スコープ内の他のすべてのステートメントよりも関数識別子を上位に持ち上げる構文上のトリックであり、関数識別子を実際の関数より前でも参照できるようにします。意味。この例では、識別子「internalFoo」がホイストされ、「fooCheck」関数内の任意の時点で使用できるようになります。
早期関数アクセス: ホイストの結果
「internalFoo」への早期アクセスはホイスティングの直接の結果です。インタプリタは関数宣言を検出し、識別子「internalFoo」をプレースホルダに割り当て、後で参照できるようにします。インタプリタが関数本体に到達した場合にのみ、定義が実行され、実際の関数が作成されます。
関数式: 異なるルールが適用されます
関数宣言とは対照的に、関数は式は通常のトップダウン実行に従います。これらは見つかったときに評価され、その識別子はホイストされません。これは、関数式が定義される前に関数式にアクセスしようとするとエラーが発生することを意味します。
ECMAScript 標準での明確化
関数宣言の動作は明示的に定義されていますECMAScript 標準 (セクション 10.1.3)。コード内の関数の位置に関係なく、関数宣言はコード ブロックの内容が実行される前にバインドされると述べています。
以上がJavaScript では定義前の関数の使用をどのように許可しますか?ホイスティングの謎を解説。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。