JavaScript 関数のスコープとホイスティング: 謎を解く
JavaScript の領域では、複雑なコードを解明するには関数のスコープとホイスティングを理解することが重要です。 「なぜこのコードは '1' を返すのですか?」という疑問を引き起こした例を詳しく見てみましょう。
var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a);
関数ホイスティング: 秘密を解明する
関数ホイスティングは、関数宣言をスコープの先頭に移動する興味深いメカニズムです。この例では、関数 b がグローバル スコープにホイストされ、次のようにモーフィングされます。
function b() { function a() {} a = 10; return; }
変数スコープ: スコープに限定
さて、シェッドしましょう変数のスコープに焦点を当てます。このコードでは、a はグローバル スコープで var を使用して宣言され、その後 b 内で再定義されます。変数が関数内で宣言されている場合、その関数のスコープ内でのみアクセスできます。
この場合、b 内で再定義された変数 a は関数に対してローカルです。したがって、元のグローバル a は影響を受けません。
誤解されている動作: より深く掘り下げる
一見すると、宣言関数 a() {} は次のように見えるかもしれません。関数宣言。ただし、実際には、関数のようなオブジェクトを定義する var a = function() {}; と同等です。これは、関数 a() {} が a という名前の関数を作成するのではなく、既存の a 変数を新しい関数で再割り当てすることを意味します。
ホイスティングとスコープの統合
関数ホイスティングと変数スコープを組み合わせると、私たちのコードは本質的に次のことを行います。以下:
したがって、b 内で使用される a はグローバル a に影響を与えないローカル変数であるため、アラートには「1」が表示されます。
以上がこの JavaScript コードが「1」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。