簡述javascript裡的var,let,const之間的區別
阿新 • • 發佈:2018-12-09
var、let、const區別
在javascript es5以前我們定義變數只是用var的,在es5之後為了彌補var定義變數的一些缺陷,就產生了const與let。 在區分var,let,const之前,我們先了解一下變數提升。 變數提升:無論在哪裡申明變數,相當於在頂部申明變數
先看看var與let的區別 var宣告變數,作用域為函式內部,存在變數提升 let宣告變數,作用域為程式碼塊內部,不存在變數提升
var difference = () => {
var a = 1
let b = 1
if (true) {
var a = 2
let b = 2
console.log(a) //=>2
console.log(b) //=>2
}
console.log(a) //=>2
console.log(b) //=>1
}
這裡我們可以看出var與let不同的作用域範圍,var在程式碼塊裡定義的a出了程式碼塊後還可以呼叫該a值,而let定義的b在出程式碼塊後呼叫時則輸出了之前定義的b值即在程式碼塊中定義的b值失效了。同時也解釋了var是具有變數提升,而let則不具備變數提升
現在我們再看看const const宣告變數,作用域為函式內部,不存在變數提升 要注意的是: - const在申明時,就應該給它賦值. - const申明值之後就不可以對值進行改動 - 可以使用const定義的變數給其他變數賦值
const c = 1
// const e //報錯:Missing initializer in const declaration
// const c = 2 //報錯:Identifier 'c' has already been declared
const d = c
console.log(c) //=>1
console.log(d) //=>1
在申明時未賦值,報錯:Missing initializer in const declaration 在申明後改動,報錯:Identifier ‘c’ has already been declared
簡單總結一下:var具有變數提升的特性,let把var的變數特性給去掉了,而const又在let的基礎上將自己定義的值轉為不可修改