1. 程式人生 > 其它 >[ES6新語法] var, let 與 const的區別

[ES6新語法] var, let 與 const的區別

let: 相較 var 做出了哪些規範?

1.不屬於頂層物件window, 不會引起汙染全域性變數這樣的問題

2.不允許重複宣告變數

3.不存在變數提升

4.暫時性死區,變數必須先宣告再使用

5.塊級作用域
例1. 求輸出結果

點選檢視程式碼
for(var i=0;i<3;++i){
	setTimeout(function(){
		console.log(i)
	}, 500)
}
輸出結果為:3 3 3

為什麼?
因為setTimeout這種操作是非同步操作,會等到主執行緒空閒並且計時器時間到達之後才執行,所以for迴圈直接執行三次,但for迴圈內的setTimeout並沒有執行,而是等到三次for迴圈執行完了以後再執行三次setTimeout

那要想得到0 1 2, 怎麼辦, 利用閉包, 程式碼如下:

點選檢視程式碼
for(var i=0;i<3;++i){
  (function(j){
    setTimeout(function(){
		console.log(j)
	}, 500)
  })(i)
}

另外的思路是採用es6新特性let

點選檢視程式碼
for(let i=0;i<3;++i){
    setTimeout(function(){
		console.log(i)
	}, 500)
}

const 相較於 let 有什麼不同

1.const 宣告常量(以往es5必須要通過定義全域性物件不可更改的屬性來達到同樣的效果),而 let與var 宣告變數
2.但是const宣告的常量只是值不發生改變,對基本資料型別,其值儲存在棧中,可以防止其被改變,但對引用資料型別,如類與陣列,其地址儲存在棧中,不會被改變,但其內容儲存在堆中,卻能夠被改變
一般要依靠Object.freeze()進行逐層的凍結

參考:https://coding.imooc.com/class/444.html