深入理解ES6之函數
深入理解ES6之對象
深入理解ES6之類
深入理解ES6之解構
深入理解ES6之Promise與異步編程
深入理解ES6之模塊
第一:塊級範圍內
var變量提升(不存在以下問題)
let塊級作用域,指定塊的外部無法訪問
const常量聲明塊級作用域,不會發生變量提升,聲明後不可以改變因此需要初始化.(對於一個對象而言不可改變是指引用不可變,內容可以改變相當於java的final關鍵字)
1:禁止重複聲明
2:暫時性死區
3:不在塊級作用域範圍內使用按照undefined處理
console.log(typeof value)//因爲發生在塊級作用域外面,不會因爲暫時性死區而崩潰
if(true){
let value = "blue"
}
第二:循環範圍內
1:let沒有任何問題
2:var循環中的使用
var funcs = [];
for(var i=0;i<10;i++){
funcs.push(functiong(){console.log(i)})
}
func.forEach(function(func){
func()
});
因爲變量i在循環的每次迭代中都被共享了 因此最後調用後的值會是打印10此10
3:循環內的常量聲明
const在for循環中使用時第一次正常運行第二次i++時,會因爲試圖修改常量報錯;
const能夠在for-in與for-of循環內工作,因爲循環爲每次迭代創建了一個新的變量綁定而不是去試圖修改已綁定的變量值。
第三:全局範圍內
1:var會覆蓋掉之前存在的同名屬性,let和const不會污染全局屬性
總結:
默認情況下應該使用const,只有知道變量需要被改變時才使用let,這樣預期外的改動都可以算作是bug處理。