ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript での宣言ホイスティングの概要 (コード例)

JavaScript での宣言ホイスティングの概要 (コード例)

不言
不言転載
2019-03-05 14:40:542650ブラウズ

この記事では、JavaScript でのステートメント プロモーションの概要 (コード例) を紹介します。これには特定の参考値があります。困っている友人は参照できます。お役に立てば幸いです。

1. 概要

JS では、コードが文ごとに実行されることは当然のことと考えられていますが、これは完全に正しいわけではありません。

singer = "周杰伦";
var singer; 
console.log(singer); // 周杰伦

sing();  // 故事的小黄花
function sing() {
   console.log("故事的小黄花");
}

上記の最初のコードが通常のプロセスに従う場合、次の var singer は値を unknown に再デフォルト設定しますが、結果は「Jay」になります。 Chou' ;

上記の 2 番目のコードは、最初に実行されてから宣言されると理解され、エラーが報告されますが、結果は報告されません。

上記のコード ブロックは、実際には次のように書き換えることができます:

var singer = undefined;
singer = "周杰伦";
console.log(singer); // 周杰伦
function sing() {
   console.log("故事的小黄花");
}
sing();  // 故事的小黄花

これは次の理由からです:

JS 定義ステートメント、代入、その他の操作は実行中に実行されます。コンパイルフェーズ 実行フェーズ中に行われます。

つまり、 最初に宣言があり、次に代入と実行があります 、これは変数と関数の宣言の昇格です。

2. 関数宣言は変数宣言より優先されます;

var foo = "bar";
function foo() {
   
}
typeOf(foo);  // string

var foo = "bar";
function foo() {
   
}
typeOf(foo);  // string

関数宣言が変数宣言の前に置かれるか後に置かれるかに関係なく、変数宣言は関数宣言をオーバーライドします。

3. 各ドメインは昇格することが宣言されます

次のコードは 10 を出力しますが、なぜですか?

var foo = 1;
function bar() {
   if (!foo) {
       var foo = 10;
   }
   alert(foo);
}
bar();

理由:

すべてのドメインは昇格されたと宣言されます。

上記のコードは次と同等です:

var foo = 1;
function bar() {
   var foo = undefined;
   if (!foo) { // !foo === true
       var foo = 10;
   }
   alert(foo);
}
bar();

4. 関数式はプロモートされるように宣言されません

まず、関数式とは何でしょうか。

// 函数声明
function foo() {
   console.log("函数声明");
}

// 函数表达式
var foo = function() {
   console.log("函数表达式");
}

関数式はプロモートされるように宣言されないため、次のようになります。

foo();  // Uncaught TypeError: foo is not a function

// 函数表达式
var foo = function() {
   console.log("函数表达式");
}

概要

変数宣言や関数宣言を含め、JavaScript にはプロモートを宣言するメカニズムがあります。 JS エンジンはコンパイル時に各スコープの宣言を検索し、代入と操作は実行時に行われます。

関数定義は関数宣言と関数式に分かれています。関数宣言には宣言の昇格がありますが、関数式にはありません。

以上がJavaScript での宣言ホイスティングの概要 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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