用於宣告變數,類似於var,但let命令所在的**塊內有效特點:
- 只在**塊內有效
- 不存在變數提公升(必須先宣告後使用,否則會報錯)
- 暫時性死區
- 不允許重複宣告
用let宣告的變數只在當前塊{}中有效,在塊級作用域外是拿不到的
console.log(a) // reference error
es5中 var宣告的變數會有變數提公升,即會賦初始值undefined,而在es6中,let宣告的變數不存在變數提公升。即:只有在let 宣告變數後才能使用變數,否則會報錯
console.
log(a) // undefined
console.
log(b) // reference error
var a =
10;let b =
11;
es6規定,在區塊中只要存在let 和 const 命令,這個區塊會對這些命令宣告的變數,從一開始就形成封閉作用域,凡是在宣告之前就使用這些變數都會報錯。這在語法上,稱為「暫時性死區」(temporal dead zone,簡稱tdz)
var a = 10;
# 例2
function
bar(x=y,y=2)
bar(); //報錯,因為x=y 這一步,y還未宣告。建議y=2放在前面
在同乙個區塊內,不允許重複宣告變數
function
(arg)
function
(arg)
}
在es5中只有全域性作用域和函式作用域,沒有塊級作用域,這會出現內層變數可能會覆蓋外層變數的問題,以及在for迴圈中,用來控制迴圈的變數i,在迴圈結束後會洩露成為全域性變數,造成全域性汙染
const宣告的復合型別資料,只是保證變數名指向的位址不變,不保證該位址的資料不變
const arr = ;
arr.push(1) //可執行『』
console.log(arr) // [1]
arr=['newarr'] //報錯
// 凍結物件
const foo = {}
foo.prop1= 123
;foo.obj=
console.log(foo.prop1) //123
object.freeze(foo)
foo.obj
.num2=222
; // 可執行
foo.prop2 = 456
; //報錯 object is not extensible
// 如下函式用於深度凍結物件
varfreeze = (obj)=>
})}
在es5中只有兩種宣告變數的方法:var 和 function 。在es6中除了加入了let 和 const 命令,還加入了import ,class命令
全域性物件是最頂層的物件,在瀏覽器中指window,在node中指global。- 在es5中,全域性物件的屬性與全域性變數是等價的。
- 在es6中,用let,const宣告的全域性變數只在當前塊級作用域內有效,不會持載到全域性物件上。
var a = 10;
console.log(window.a) //
10;let b = 11;
console.log(window.b) //
undefined;
ES6學習 let和const命令
1.let命令 所宣告的變數命令所在 塊有效 a referenceerror a is not defined.b 1for迴圈的計數器,就很適合let命令 for let i 0 i arr.length i console.log i referenceerror i is not defin...
es6學習筆記 let和const
console.log b uncaught referenceerror a is not defined 在for迴圈中,迴圈語句部分是乙個作用域,內部又是乙個作用域 for let a 1 a 3 a 在let宣告變數完成前,對變數賦值會出錯es中模仿塊級作用域 function functi...
ES6學習 let和const命令
說明 本文參考阮一峰的ecmascript 6 入門 console.log a 塊外使用會報錯 referenceerror a is not defined for迴圈內使用let和var產生的不同效果 下面 使用的是var,結果為10 var a for var i 0 i 10 i a 9 ...