webstormを使用してフロントエンドコードを記述しているときに、var変数を使用するとletに変更するように求められたので、2つの違いを確認して記録しました。
1. VarはES5仕様に属し、ES6仕様に属します
2. Varには前処理メカニズムがありますが、letにはありません。前処理メカニズムは事前に宣言するとしばしば言われます
ES6には、ローカル変数を宣言するletコマンドが追加されました。その使用法はvarに似ていますが、宣言された変数はletコマンドが配置されているコードブロックでのみ有効であり、一時的なデッドゾーン制約があります。
まず、varの共通変数のプロモーションに関するインタビューの質問を見てみましょう。
题目1:
var a = 99; // 全局变量a
f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。
console.log(a); // a=>99, 此时是全局变量的a
function f() {
console.log(a); // 当前的a变量是下面变量a声明提升后,默认值undefined
var a = 10;
console.log(a); // a => 10
}
// 输出结果:
undefined
10
99
3.スコープは異なり、varはグローバルスコープ、letはブロックレベルのスコープです。
ES6より前は、変数を宣言するためにvarを使用していました。JSには関数レベルとグローバルスコープしかなく、ブロックレベルのスコープはないため、{}はvarで宣言された変数のアクセススコープを制限できません。スコープは縮小されますが、変数の使用がより安全になります。
次に例を示します。
{
var i = 9;
}
console.log(i); // 9
ES6の新しいletでは、ブロックレベルのスコープで変数を宣言できます。
{
let i = 9; // i变量只在 花括号内有效!!!
}
console.log(i); // Uncaught ReferenceError: i is not defined