let命令有四大主要特性:存在塊級作用域,沒有變數提公升,暫時性死區,不允許重複宣告。(記憶:塊作沒變,暫死不重)
這都是和es5的var變數特性相反的。
var的作用域是函式級的。
let命令宣告的變數只在其塊級作用域中有效,就是{}中。
console.
log(a)
;//出錯 not defined
console.
log(b)
;//1
es5中要實現塊級作用域,通常借助立即執行匿名函式來實現:
(
function()
());
console.
log(a)
;//出錯,not defined
但是有了let之後,就像c語言一樣,直接就是:
console.
log(a)
;//出錯, not defined
也正因如此,變數必須在宣告後使用,否則會報錯。
console.
log(a)
;//出錯, not defined
let a =
1;
對比var經典的變數提公升
console.
log(a)
;//undefined
var a =
1;
在塊級作用域內,若存在用let命令宣告的變數,則所在區塊對該變數形成封閉作用域,也就是該變數無視外部的同名變數。而又因為不存在變數提公升,所以在該區塊中,不能在宣告前使用該變數。
var a =1;
if(true
)
對比var
var a =1;
if(true
)
4、不允許重複呼叫
let不可以在相同作用域內重複宣告同乙個變數,也包括不能和var,const變數名重複
let a =1;
let a =1;
//出錯 let不可重複宣告
var b =1;
let b =1;
//出錯 let不可重複宣告
const c =1;
let c =1;
//出錯 let不可重複宣告
使用let宣告變數
es5宣告變數的問題 1.全域性變數掛載到全域性物件 全域性物件成員汙染問題。let宣告的變數不會掛載到全域性物件。2.允許重複的變數宣告,導致變數被覆蓋。let宣告的變數不允許當前作用域範圍內重複宣告。3.變數提公升 怪異的資料訪問,閉包問題。使用let不會有變數提公升,因此,不能在定義變數之前使...
ES6 let變數宣告
var 宣告的變數在window上 用let或者const去宣告變數,這個變數不會被放到window上 array.foreach function currentvalue,index,arr thisvalue 如果瀏覽器對let已經支援了,其實絕大部分情況下var都可以被替換成let,以後盡量...
詳解let和const變數宣告
let和const在很多任務程師眼裡可能只是變數宣告符,其實錯了!它還是有很多小細節值得注意的,這裡我簡單介紹幾點。一 塊級作用域 在es6之前我們腦海裡應該只存在全域性作用域和函式級作用域,沒有塊級作用域。那麼為什麼要引入塊級作用域呢?相信很多剛入門的同學看到上述 會有所不解,其實在全域性作用域s...