ES6 —— let和const

let

let聲明一個變量,與var最不同的地方在于。let擁有塊級作用域,{ } 所包裹住的地方即為一個塊級作用域。

塊級作用域中聲明的變量在外部無法訪問,for循環(huán)中:


for(let i = 0; i<3;i++){
  let i = 12
  console.log(i)
}
// 輸出3次12

for 循環(huán)有兩個塊級作用域,設(shè)置循環(huán)變量的是父作用域,{}中的是子作用域。


let arr =[]
for (let i = 0;i<3;i++){
  console.log(i)
  arr.push(function(){
      console.log(i)
  })
}
console.log(i)
console.log(arr[1]())
// 輸出 0 ,1 ,2
// 輸出 i not defined
// 輸出 1

for (var i = 0; i<3; i++){
  console.log(i)
  arr.push(function(){
    console.log(i)
  })
}
console.log(i)
console.log(arr[1]())
// 輸出 0 ,1 ,2
// 輸出3
// 輸出3

let i 只執(zhí)行了一次,但由于let的創(chuàng)建是尊重塊級作用域的,所以每次循環(huán)都是一個新的i,值是i++的結(jié)果,所以閉包引用的i的地址都是不同的。用var聲明的i都是同一個地址,所以閉包的結(jié)果是相同的。

暫時性死區(qū)和不允許重復(fù)聲明

在一個塊級作用域中,let和const聲明的變量就綁定了這個區(qū)域,外部聲明的與之無關(guān)。在塊級作用域中聲明之前引用這兩個變量會報錯,稱之為暫時性死區(qū)。

let a = 1 
if (true) {
  console.log(a)   // a is not defined
  let a = 2
  console.log(a)   // a has already been declared
}

let 和const不存在變量提升,不同于var

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本都是從阮一峰大神的文檔中摘錄的重點,鏈接:http://es6.ruanyifeng.com/?search=...
    立的flag一直在倒閱讀 359評論 0 0
  • let和const命令 let let命令與var類似,但是所聲明的的變量只能在let所在的代碼塊內(nèi)有效,let不...
    coolheadedY閱讀 285評論 0 0
  • 1、let命令 基本用法 let用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)...
    開車去環(huán)游世界閱讀 568評論 0 0
  • 1、let命令 基本用法 let用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)...
    壯哉我大前端閱讀 220評論 0 1
  • 基本用法 let 和const是ES6新增的兩種,聲明變量的方法,用法與var 類似,但都有各自的特點和用途。 l...
    王阿王閱讀 274評論 0 0

友情鏈接更多精彩內(nèi)容