ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 関数のホイストとスコープは変数の代入と取得にどのような影響を与えますか?

JavaScript 関数のホイストとスコープは変数の代入と取得にどのような影響を与えますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-17 17:08:13346ブラウズ

How Does JavaScript Function Hoisting and Scoping Affect Variable Assignment and Retrieval?

JavaScript 関数のスコープとホイスティング: 隠されたメカニズムを明らかにする

JavaScript のスコープとホイスティングに関連する複雑な例に遭遇しました。より明確な理解を得るために、これらの概念をさらに深く掘り下げてみましょう。

関数ホイスティング

ホイスティングは、関数宣言を、それを含むスコープの先頭に持ち上げます。あなたの例では:

function b() {
    a = 10;
    return;

    function a() {}
}

インタプリタはこのコードを次のように再配置します:

function b() {
    function a() {}
    a = 10;
    return;
}

これは、内部関数 a() 宣言が効果的に b() の先頭に配置されることを意味します。コードの後半に表示されますが、関数。

変数スコープ

JavaScript では、変数のスコープをグローバルまたはローカルに設定できます。グローバル変数はプログラム内のどこからでもアクセスできますが、ローカル変数は定義関数のスコープ内に限定されます。

関数宣言の奇妙なケース

コード内、 b() 内の内部関数 a() 宣言は即時関数として解釈されます。呼び出し:

var a = function () {};

これにより、b() 関数内にローカル変数 a が効果的に作成され、グローバル変数 a がシャドウされます。

すべてをまとめて実行

ホイスティングと変数スコープの概念を組み合わせると、実行シーケンスを次のように視覚化できます。

  • 関数 b() 宣言は、グローバル スコープの先頭にホイストされます。
  • var a = 1 ステートメントは、グローバル a 変数を定義します。
  • 内部関数 a() 宣言も b() 関数内でホイストされ、 var a = function () のように動作します{};.
  • a = 10 ステートメントは、b() 内のローカル a 変数を再割り当てします。
  • alert(a) を呼び出すと、まだ割り当てられていないグローバル a 変数が返されます。変更され、元の値 1 のままになります。

以上がJavaScript 関数のホイストとスコープは変数の代入と取得にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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