機能範囲と昇進

ES6がletを導入する前は、変数はvarで宣言されており、関数スコープということわざがありました。letを使用して変数を宣言します。変数は、宣言された後にのみ存在します。
varを使用して変数を宣言すると、宣言の前であっても、現在のスコープで変数を呼び出すことができます。宣言されていない変数と値が未定義の変数は概念ではありません。宣言されていない変数を使用するとエラーが報告されますが、値がundefinedの既存の変数を安全に使用できます。

(例1)letを使用する場合、使用する変数が宣言されていないとエラーになります

console.log(x)   // 错误终止
let x = 3;    

(例2)varを使用する場合、変数宣言の前に呼び出すことができます

console.log(x)            // undefined
var  x = 3;    
console。log(x)            // 3

どうしてこうなりました?宣言されていない変数にアクセスできないため、表面的には理解するのが少し難しいようです。
実際、varで宣言された変数によって使用されるプロンプトメカニズム。JavaScriptは現在のスコープをスキャンし、varで宣言された変数はすべてスコープの先頭にプロモートされます。理解しておくべき重要なことは、促進されるのは宣言であり、割り当てではないということです。したがって、JavaScriptは上記のコード(例2)を次の形式に変換します。

var x  
console.log(x)
x = 3
console.log(x)

おすすめ

転載: blog.csdn.net/qq_44977477/article/details/108602210