區別一 使用var在全局作用域中聲明的變量會成為window對象的屬性,let不會
var name='ll';
console.log(window.name); //ll
let age = 22;
console.log(window.age); //undefined
區別二 let聲明的范圍是塊作用域,var聲明的范圍是函數作用域
if(true){
var name='ll';
console.log(name);//ll
}
console.log(name); //ll
if(true){
let age=22
console.log(age); //22
}
console.log(age); //報錯 age未定義
區別三 let聲明的變量不會在作用域中被提升,var存在變量提升
console.log(age) //報錯 age未定義 在解析代碼時,JavaScript引擎也會注意出現在塊后面的let聲明
let age=22;
var name = 'll';
function train(){
console.log(name);
var name = 'll'
}
train() //undefined;
區別四 let不允許同一個塊作用域出現冗余聲明,var允許,后面聲明的變量值會覆蓋前一個。
var name = 'll';
var name = 'lu'
let age = 22;
let age = 31;//報錯 標識符age已經聲明過了
對於聲明冗余報錯不會因為混用let和var而受影響
const聲明
const的行為與let基本相同,唯一一個重要的區別是它聲明變量時必須同時初始化變量,且嘗試修改const聲明的變量會導致運行的錯誤
如果用const聲明的是一個對象,那么修改這個對象內部的屬性並不違反const的限制