ホームページ  >  記事  >  ウェブフロントエンド  >  jsの変数プロモーションとは何ですか?なぜ変動プロモーションがあるのですか?

jsの変数プロモーションとは何ですか?なぜ変動プロモーションがあるのですか?

青灯夜游
青灯夜游転載
2021-08-16 09:51:257524ブラウズ

JavaScript における変数プロモーションとは何ですか?この記事では、js での変数プロモーションについて説明し、変数プロモーションが存在する理由を紹介します。

jsの変数プロモーションとは何ですか?なぜ変動プロモーションがあるのですか?

js 変数のプロモーション

JavaScript はシングルスレッド言語であるため、順番に実行する必要があります。ただし、1 行ずつ分析して実行するのではなく、部分ごとに分析して実行し、最初にコンパイル フェーズが実行され、次に実行フェーズが実行されます。コンパイル段階中、コードが実際に実行される数ミリ秒前に、すべての変数と関数の宣言が検出され、Lexical Environment と呼ばれる JavaScript データ構造内のメモリに追加されます。したがって、これらの変数と関数は、実際に宣言される前に使用できます。

簡単な例から始めましょう:

 a = 2;
 var a;
 console.log(a);

上記のコードは何を出力しますか? このコードが上から下に実行されると、間違いなく未定義の出力が出力されますが、JavaScript は次のような言語ではありません。トップダウンで実行されます。 このコードの出力は 2 ですが、これは予想外でしょうか?では、なぜこのようなことが起こっているのでしょうか? 重要な点は、変数プロモーションにあります。現在のスコープ内のすべての変数の宣言をプログラムの先頭に上げます。したがって、上記のコードは次のコードと同等です。これでより明確になりますか?

 var a;
 a = 2;
 console.log(a);

次に、別の例を見てみましょう:

 console.log(a);
 var a = 2;

このコードは何を出力しますか?出力2? 実際、このコードは unknown を出力します。これが理由です?先ほども言いましたが、JavaScript では変数の宣言は先頭に昇格しますが、代入文は昇格しません。js の場合、var a = 2 は 2 段階の解析:

var a;
a = 2;
に分割されます。

そして、js は文 var a のみをプロモートするので、今のステートメントは次と同等です:

 var a;
 console.log(a);
 a = 2;

それでは、なぜ変数のプロモートがあるのでしょうか?

変数昇格という現象はなぜ起こるのでしょうか? なぜなら、js は他の言語と同様、コンパイルと実行の段階を経る必要があるからです。 js がコンパイル段階にあるとき、すべての変数宣言を収集して事前に変数を宣言し、他のステートメントの順序は変更されないため、コンパイル段階では最初のステップが実行され、2 番目の部分が実行されます。ステートメントが実行フェーズで実行される場合のみ。

変数宣言

jsの変数宣言は大きく分けてvar宣言、let、const宣言、関数宣言の3種類に分かれます。 関数宣言が他の宣言と一緒に出現すると、競合が発生する可能性があります。下を見てみましょう:

 fn();
 function fn () {
     console.log('fn');
 }
 var fn = 2;

何が出力されると思いますか?これを書くとエラーになりますか? 実際、出力結果は fn になります。これは、関数宣言が他の宣言と一緒に現れた場合、どちらが優先されるのかという、先ほどの質問の説明になります。答えは、関数宣言は何よりも重要です。結局のところ、関数は js の貴族クラスです。

非常に多くの関数宣言をどうすればよいでしょうか?

 fn();
 function fn () {
     console.log('1');
 }
 function fn () {
     console.log('2');
 }

上記のコードの出力結果は 2 です。これは、 に複数の関数宣言がある場合、最後の関数宣言が前の を置き換えるためです。

最後の例が 1 つあります:

 fn();
 var fn = function () {
 console.log('fn');
 }

上記を理解すると、これは非常に簡単になるでしょうか。これも 2 番目の例と同じで、var fn = function() {} という形式を関数式と呼びます。 実際には 2 つの部分に分かれています。

var fn;
fn = function() {};

例 2 を参照すると、この結果はエラーになることがわかります (fn は宣言されていますが割り当てられていないため、fn は未定義であるため)。

まとめ

それでは、まとめてみましょう。

  • js は、変数の宣言を js の先頭に昇格させて実行します。var a = 2 などのステートメントでは、分割され、var a ステップが昇格されます。

  • 変数プロモーションの本質は、JS エンジンがコンパイル時にすべての変数を宣言するため、実行時にはすべての変数が宣言されているということです。

  • 同じ名前の変数が複数ある場合、関数宣言は他の宣言を上書きします。複数の関数宣言がある場合、最後の関数宣言が以前のすべての宣言をオーバーライドします。

プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !

以上がjsの変数プロモーションとは何ですか?なぜ変動プロモーションがあるのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。