JavaScript では定義前の関数の使用をどのように許可しますか?ホイスティングの謎を解説。

Mary-Kate Olsen
リリース: 2024-10-28 20:24:02
オリジナル
888 人が閲覧しました

How Does JavaScript Allow Function Use Before Definition? The Mystery of Hoisting Explained.

関数宣言と式: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!