ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript での宣言ホイスティングの概要 (コード例)
この記事では、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 サイトの他の関連記事を参照してください。