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

青灯夜游
リリース: 2021-08-16 09:51:25
転載
7442 人が閲覧しました

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 までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!