前端知識總結(八):var,let和const的區別

let和const都能夠聲明塊級作用域,用法和var是類似的,let的特點是不會變量提升,而是被鎖在當前塊中。

    console.log(a) // a is not defined
    let a = 1

    if(true) {
      let b = 1
      var c = 2
    }
    console.log(b)  // b is not defined
    console.log(c) // 2

    console.log(d) //c is undefined
    var d = 1

let不允許在同一作用域裏進行重複聲明同一個變量,在同一個作用域裏,如果使用var進行聲明變量,後面會覆蓋前面的 .

const一般用來聲明常量,一但聲明,其值就不能更改,意味着const一旦聲明常量,就必須同時初始化。不能先聲明,後初始化,這樣會報錯

與let一樣。const聲明的常量也只在塊級作用域內有效

與let一樣,必須先聲明,後使用

與let一樣,在同一作用域,const不能重複聲明同一常量

const a = 5
a = 20

console.log(a)//Uncaught SyntaxError: Identifier 'a' has already been declared

const雖然是常量,不允許修改默認賦值,但如果定義的是對象Object,那麼可以修改對象內部的屬性值。

const obj= {
  a: 10
}
obj.a = 100 //沒有直接修改obj的值,而是修改obj.a的屬性值,這是允許的。
console.log(obj) // {a: 100}

var聲明的變量爲全局變量(被譽爲JS最大設計缺陷之一)

var聲明的變量沒有塊級作用域,既會污染全局變量,也使循環中的異步代碼不能如意執行

for(var i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i) //5, 5, 5, 5, 5
  }, 0)
}
console.log(i) //5 i跳出循環體污染外部函數

//將var改成let之後
for(let i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i) // 0,1,2,3,4
  }, 0)
}
console.log(i)//i is not defined i無法污染外部函數

在實際開發中,我們選擇使用var、let還是const,取決於我們的變量後面是否需要修改,通常一些不希望被修改的變量,使用const。當你需要修改聲明的變量值時,使用let,var能用的場景都可以使用let替代。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章