全面解析var、const、let的區別

作用域:變量作用域(全局變量和局部變量) 、函數作用域(函數內部的變量)

作用域鏈:其實就是一些可訪問對象的集合。比如函數執行時會產生一個活動對象,活動對象中。

在JavaScript中,函數也是對象,實際上,JavaScript裏一切都是對象。函數對象和其它對象一樣,擁有可以通過代碼訪問的屬性和一系列僅供JavaScript引擎訪問的內部屬性。其中一個內部屬性是[[Scope]],該內部屬性包含了函數被創建的作用域中對象的集合,這個集合被稱爲函數的作用域鏈,它決定了哪些數據能被函數訪問。

當一個函數創建後,它實際上保存一個作用域鏈,並且作用域鏈會被創建此函數的作用域中可訪問的數據對象填充。

 

var:

1、可能存在聲明提前

     var聲明未初始化的變量會提升

     未聲明的變量賦值的變量會提升

     只有var聲明初始化的變量不會提升

2、能重複聲明、能重複賦值

3、不存在塊作用域

 

let:

1、不存在聲明提前,在塊作用域的頂端會有暫時性死區。

2、不能重複聲明、能重新賦值

3、存在塊作用域

 

const:

同於let,區別在於const不能重複賦值。

 

var聲明的變量需要注意的是,函數內部函數執行完成即可銷燬,如果在window作用域下,則在關閉頁面時纔會銷燬。

結語:那麼何時使用let、const呢,如果只是引用,請使用let、const。循環中,優先使用let。

 

 

 

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