var和let關鍵字的比較
說明
let是es6新增的關鍵字
有效區域
let 是在代碼塊內有效,var 是在全局範圍內有效:
{
let a = 0;
var b = 1;
}
a // 此時報錯ReferenceError: a is not defined
b // 此時輸出1
重複聲明
let 只能聲明一次 var 可以聲明多次
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a // 此時報錯Identifier 'a' has already been declared
b // 此時輸出4
let可以在循環中使用,每次循環都是一個新的變量
var是全局聲明的,在循環中可以一直使用同一個變量
變量提升
console.log(a); //報錯ReferenceError: a is not defined
let a = "apple";
console.log(b); //undefined var
b = "banana";
變量 b 用 var 聲明存在變量提升,所以當腳本開始運行的時候,b 已經存在了,但是還沒有賦值,所以會輸出 undefined。
變量 a 用 let 聲明不存在變量提升,在聲明變量 a 之前,a 不存在,所以會報錯。