ES6(二)—— let 與 const

又來更新學習筆記啦~數組

目錄

  • let數據結構

    • 解決var存在的問題
    • 特色閉包

      • 1.有塊級做用域
      • 2.全局變量不能用過window(全局對象)訪問
      • 3.不能重複聲明變量
      • 4.不會進行變量提高
  • const異步

    • 特色學習

      • 1.全部let的屬性都有
      • 2.只能定義常量,不能被修改
      • 3.聲明時必須初始化
    • 爲何const定義對象,其屬性能夠改變,可是常量不能夠?
  • 最佳實踐
  • ES6-ES10學習版圖

let

解決var存在的問題

let的出現是爲了解決一些var存在的問題spa

  1. 同名變量,不在一個做用域,互不影響
// 下面兩個i,雖然名字同樣,可是不在一個做用域,因此互不影響
for (let i = 0; i < 3; i++) {
    let i = 'foo'
    console.log(i) // foo
}
  1. 解決循環嵌套計數器命名相同混亂的問題
const arr = [1, 2, 3, 4]
for(let i = 0; i < 3; i++) {
    for(let i = 0; i < 4 ; i++) {
        console.log(arr[i])
    }
}
// 1 2 3 4 1 2 3 4 1 2 3 4
  1. 解決計數器循環中有異步變量被改變的問題(解決原理:閉包)
for (var i = 0; i < 3; i++) {
    setTimeout(() => {
        console.log(i)
    }, 0)
}
// 輸出三個3

特色

1.有塊級做用域
{
    let a = 1
    console.log(a)
}
console.log(a) //a is not defined
2.全局變量不能用過window(全局對象)訪問
var b = 3
let c = 4
console.log(b, c) // 3,4
console.log(window.b, window.c) //3,undefined
3.不能重複聲明變量
var b = 3
let c = 4
console.log(b, c) // 3,4

var b = 4
console.log(b) //4

let c = 5  // Identifier 'c' has already been declared c已經被聲明
console.log(c)
4.不會進行變量提高
function test() {
    console.log(a)
    let a = 1
}
test() // Cannot access 'a' before initialization 不能在初始化以前調用

const

特色

1.全部let的屬性都有
2.只能定義常量,不能被修改
cosnt a = 2
a = 3 //Assignment to constant variable 類型錯誤
3.聲明時必須初始化
const a //Missing initializer in const declaration  聲明的時候缺乏初始化
a = 2

爲何const定義對象,其屬性能夠改變,可是常量不能夠?

const實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址不得改動,對於簡單類型的數據(數值,字符串,布爾值),值就保存在變量指向的那個內存地址,所以等同於常量。指針

但對於複合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指針,const只能保證這個指針指向的內存地址是固定的,至於它指向的內存地址中保存的數據結構是否是可變的,就徹底不能控制了。所以將一個對象聲明爲常量要當心。code

最佳實踐

不用var,主用const,遇到可變的使用let對象

學習版圖

相關文章
相關標籤/搜索