JavaScriptにおける変数の昇格と関数の古典的な例の分析

2212 ワード

本論文の実例は、JavaScriptにおける変数の昇格と関数の向上を述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
二つの例から話す:
eg 1:

var i;
console.log(i); // 2

eg 2:

console.log(i); // undefined
var i = 2;

1、アップグレード
変数と関数宣言は、コード内に現れる位置から一番上に引き上げられます.
注意:
宣言自体がアップグレードされますが、割り当て操作はアップグレードされません.
変数は、プログラム全体の一番上ではなく、その所在関数の一番上に移動します.
関数宣言はアップグレードされますが、関数式はアップグレードされません.

func1(); // Uncaught TypeError: func1 is not a function
func2(); // Uncaught ReferenceError: func2 is not defined
var func1 = function func2() { ... };

JavaScriptのReferenceErrとType Errer:
①ReferenceErrer:引用ミス.JavaScriptエンジンが変数を検索する時、スコープ内にこの変数が見つからないと、JavaScriptエンジンがReferenceErrerを投げます.
②Type Errer:タイプエラー.作用領域にある変数の参照を見つけて、その変数に力の及ばないことをさせると、その存在しない属性を引用するか、関数でない変数を関数として参照すると、JavaScriptエンジンはTypeErrをスローします.
2、関数優先
関数宣言と変数宣言はアップグレードされますが、関数は先に引き上げられます.そして変数です.

func(); // 1
var func;
function func() {
  console.log(1);
}
func = function() {
  console.log(2);
}

運転結果:出力1は2ではありません.
理由:var func;function func()の前に現れていますが、関数宣言が普通の変数にアップグレードされる前に無視されるという繰り返しの声明です.上記のコードは、

function func() {
  console.log(1);
}
func(); // 1
func = function() {
  console.log(2);
}

繰り返し宣言は無視されますが、後の関数宣言は前のものを上書きします.

func(); // 3
function func() {
  console.log(1);
}
func = function() {
  console.log(2);
}
function func() {
  console.log(3);
}

通常のブロックの内部の関数宣言は、通常、その役割領域の上部に引き上げられます.昇格プロセスは条件判定によって制御されません.

func(); // 2
var flag = true;
if (flag)
  function func() { console.log(1); }
else
  function func() { console.log(2); }

注意:ブロック内で関数を宣言しないようにしてください.JavaScriptの今後のバージョンでは上記の挙動が変更される可能性があります.
JavaScriptの関連内容については、当駅のテーマを見ることができます.「JavaScript常用関数技術まとめ」、「javascript対象入門教程」、「JavaScriptエラーとデバッグ技術まとめ」、「JavaScriptデータ構造とアルゴリズム技法まとめ」及び「JavaScript数学演算用法まとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.