JavaScript での宣言のプロモーションについて話しましょう

WBOY
リリース: 2022-11-14 20:28:48
転載
1140 人が閲覧しました

この記事では、JavaScript に関する関連知識を提供します。主にステートメントのプロモーションに関する関連コンテンツを紹介します。ステートメントのプロモーションは JavaScript パーサーの機能であり、コード内の関数に影響を与えます。効果変数宣言文の を、それが配置されているスコープの先頭に抽出しますので、見てみましょう。

JavaScript での宣言のプロモーションについて話しましょう

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

ステートメントの改善 (ホスティング) は JavaScript パーサーの機能であり、コード内の関数と変数の宣言ステートメントを、それらが配置されているスコープの前に抽出します。

関数のプロモーション

JavaScript は、関数宣言前の関数呼び出しをサポートしています。

say();function say() {  console.log("Hello");
}
ログイン後にコピー

パーサーはスコープ内のコードをスキャンし、関数宣言を実行コードの先頭に抽出します。したがって、パーサーはこのコードを次のように調べます。

function say() {  console.log("Hello");
}say();
ログイン後にコピー

通常の関数に加えて、async functionfunction *async function * 同様のリフティング効果もあります。

var 変数宣言の昇格

var キーワードの変数宣言は昇格されますが、変数の割り当ては昇格されません。

console.log(foo); // undefinedvar foo = "bar";console.log(foo); // 'bar'
ログイン後にコピー

上記のコードの解析結果は次のとおりです:

var foo;console.log(foo);
foo = "bar";console.log(foo);
ログイン後にコピー

これにより、奇妙な問題が発生する可能性があります:

var x = "x in global";

(function () {  // 这里期望读取全局变量
  console.log(x); // 结果为undefined. 
  /* ... */
  // 在函数内某处
  var x = "x in function";
})();
ログイン後にコピー

以前は、この奇妙な改善を回避するために、誰もが通常、スコープの先頭に var 宣言を置きます。

var x='x';var y='y';function (){    var x;    var foo;    // ...}
ログイン後にコピー

もちろん、ここでは var を使用せず、より合理的な letconst を使用することにします。

letconst 変数宣言とデッドゾーン

次に、letconst は次のようになります。変動昇進はないのですか? - 必ずしも。

次の例を見てください:

const x = "x in global";

(function () {  // 这里期望读取全局变量
  console.log(x); // ReferenceError: Cannot access 'x' before initialization
  /* ... */
  // 在函数内某处
  const x = "x in function";
})();
ログイン後にコピー

実行エラーが報告され、const x = "x in function"; 1 行が、領域内の上位市外局番に影響を与えます。範囲。

パーサーは、現在のスコープ内の const および let 宣言をスキャンします。宣言ステートメントの前に変数名を使用すると、ReferenceError がトリガーされます。これにより、前述の var プロモーションの問題とあいまいなコード パターンが回避されます。

class キーワードにも同じ効果があり、new 未宣言のクラスも ReferenceError を引き起こします。

new MyClass(); // ReferenceError: Cannot access 'MyClass' before initializationclass MyClass {}
ログイン後にコピー

この状況は改善ではないと考える人もいます。結局のところ、宣言と割り当ては事前に行われていないためです。また、これらの宣言は実行前に影響を及ぼし、その効果が改善されると考える人もいます。個人的には、識別子 (変数名とクラス名) を促進する後者の方が好きです。

概要

一部の JavaScript 宣言ステートメントの効果は、それが配置されているスコープ全体に影響を及ぼします。この現象はプロモーションと呼ばれます。

プロモーションには 3 つのタイプがあります:

  • #function キーワードの宣言と割り当ての両方がプロモーションされます。
  • var キーワード宣言は昇格されますが、割り当ては昇格されません。
  • letconstclass 識別子が昇格されてデッド ゾーンが形成され、宣言も代入も昇格されません。

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

以上がJavaScript での宣言のプロモーションについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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