ES6筆記-- let和const

先說說let。let有塊級做用域一說,即{}就是一個塊級做用域。在{}內使用let聲明的變量,{}外沒法使用。數組

{let a = 5}
console.log(a)   // Uncaught ReferenceError: a is not defined

再就是和var的區別在於for循環中,在for循環中時候var聲明的變量,i指向同一個,而是用let聲明的變量都是獨立的。函數

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10  循環內被賦給數組 a 的函數內部的console.log(i),裏面的 i 指向的就是全局的 i

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6 當前的 i 只在本輪循環有效,因此每一次循環的i其實都是一個新的變量

let命令不存在變量提高存在暫時性死區,因此養成好習慣:變量必定要先聲明後使用。指針

對於函數聲明,環境致使的行爲差別,避免在塊級做用域內聲明函數。若是確實須要,也應該寫成函數表達式,而不是函數聲明語句!!!code

對於const的理解,須要注意其 不變 的含義:const實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址不得改動。(因此對於非引用數據類型地址保存了該數值,而對於引用數據類型地址是一個指針),所以const聲明的對象中的key,value是能夠改變的,若是真的想將對象凍結,應該使用Object.freeze方法。對象

最後,在ES6中聲明變量的方式有6中: var、function、let、const、import、class內存

相關文章
相關標籤/搜索