let
1、所聲明的變量只在let所在的代碼塊中有效。例:
{
var attr1 = 'a'
let attr2 = 'b'
}
console.log(attr1)// a
console.log(attr2)// 報錯
2、不存在變量提升
console.log(attr1)//undefined
var attr1 = 'a'
console.log(attr2)//報錯
let attr2 = 'b'
3、存在暫時性死區: ES6中規定如果區塊中存在let、const命令,區塊中對這些命令聲明的變量一開始就形成了封閉作用域。凡是在聲明前使用這些變量都會報錯。
var attr1 = 'hello'
if (true){
console.log(attr1)//報錯
let attr1 = 'world'
console.log(attr1)
}
4、let命令不允許在相同作用域內聲明相同的變量
{
var attr1 = 'a'
let attr2 = 'b'//報錯
}
5、let只能存在於當前作用域的頂層
{
if(true){
let x = 'test'
}
if(true)let y = 666 // 報錯 因爲 y 沒有出現在當前作用域的頂層
}
const
1、const聲明的值不能修改,const在聲明的時候就必須初始化。
2、const聲明常量的作用域只在聲明所在代碼塊中有效。
3、const聲明的常量不存在提升。和let一樣存在暫時性死區。
ES6中聲明變量的幾種方式
ES6中可以使用 var、function、let、import、class聲明變量。其中前兩種在ES5中就支持。