jsの変数アップと使い方について詳しく説明します.

1875 ワード

紹介する
変数を昇格させるHoistingは、JavaScriptに対する文脈の働き方の認識であり、公式に与えられた変化ではない.
文字どおり、変数の昇格とは変数と関数の声明が物理層で作用領域の先頭に移動するという意味です.しかし、このような理解は正確ではなく、効果は同じですが、実際の実装はJavaScriptの変数と関数の声明がコンパイル段階でメモリに入れられます.
これは、使用者が関数または変数を正式に宣言する前に使用できることを意味します.
関数の昇格
JavaScriptでは、関数を宣言する前に、私たちはそれを使うことができます.皆さんは経験したはずです.

test();

 

function test() {

  // do something

}
正常な使用状況では、関数を先に宣言しなければ呼び出せませんが、この方法は依然として実行できます.これはJavaScriptが自動的に関数宣言をメモリに保存したからです.JavaScriptが自動的に関数宣言を一番前に上げたように見えます.
変数の昇格
変数については、JavaScriptは同様の方法を使用していますが、変数のアップグレードに対しては、JavaScriptは変数宣言をアップグレードするだけです.ただし、初期化は行われません.変数の初期化前に使用すると、undefinedが得られます.

// undefined

console.log(a);

// ReferenceError: b is not defined

console.log(b);

var a = 10;

// undefined

console.log(num);

num = 6;

// 6

console.log(num);

num += 7;

// 13

console.log(num);

var num;

// undefined

console.log(num);

num = 1;

// 1

console.log(num);

var num = 2;

// 2

console.log(num);
ここで注意したいのですが、JavaScriptの変数アップはvarに対して、letとconstには変数アップという特性が存在しません.

// ReferenceError: a is not defined

console.log(a);

let a = 10;
ちょっと複雑な例

var a = 100;

function fn() {

  // undefined

  console.log(a);

  var a = 200;

  // 200

  console.log(a);

}

fn();

// 100

console.log(a);

var a;

// 100

console.log(a);

// 300

var a = 300;

console.log(a);