1. 程式人生 > >簡述javascript裡的var,let,const之間的區別

簡述javascript裡的var,let,const之間的區別

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的基礎上將自己定義的值轉為不可修改