一文帶你瞭解var、let和const

var變量聲明

var是用於聲明變量,聲明的變量掛載在window下。

console.log(i,window.i)
if(true){
    var i = 10;
}
console.log(i,window.i )

我們可以看到變量聲明提前,在if外任意可以訪問。

在這裏插入圖片描述

let變量聲明

let聲明的變量不會掛載在window下,新增了塊級作用域,在ES6以前只有函數作用域和全局作用域。

if(true){
    let i = 10;
    console.log(i,window.i )
}
console.log(i)

window中不存在i,且在let聲明的塊級作用域下才可訪問,在塊級作用域外無法訪問,這樣做不會造成變量污染。

在這裏插入圖片描述

console.log(i)
let i = 10;

值得一提的是在網絡上大多說的是let不會有聲明提前,當然這只是人看到的效果,實際有聲明提前在暫時性死區中 Uncaught ReferenceError: Cannot access 'i' before initialization(暫時性死區)

在這裏插入圖片描述

const常量聲明

let的不同的地方時const是用於常量聲明,常量是不可變化的量,必須定義和複製,所有常量一經定義,就不允許被修改,也不允許改變空間的地址。

當我們定義未賦值時報錯

const a;

在這裏插入圖片描述

當我們嘗試修改常量時報錯。

const a = 123;
a = 456;

在這裏插入圖片描述

總結

var過多的使用容易造成變量污染,我們日常開發中儘可能的使用ES6中的letconst
letconst是不允許重複聲明的。
let的聲明會形成塊級作用域,不會造成變量的污染。
常量比變量的效率要高,能使用const就是用const,不能使用const就用let

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