let、const、var的區別
(1)塊級作用域: 塊作用域由 { }包括,let和const具有塊級作用域,var不存在塊級作用域。塊級作用域解決了ES5中的兩個問題:
內層變量可能覆蓋外層變量
用來計數的循環變量泄露為全局變量
(2)變量提升: var存在變量提升,let和const不存在變量提升,即在變量只能在聲明之后使用,否在會報錯。
(3)給全局添加屬性: 瀏覽器的全局對象是window,Node的全局對象是global。var聲明的變量為全局變量,并且會將該變量添加為全局對象的屬性,但是let和const不會。
(4)重復聲明: var聲明變量時,可以重復聲明變量,后聲明的同名變量會覆蓋之前聲明的遍歷。const和let不允許重復聲明變量。
(5)暫時性死區: 在使用let、const命令聲明變量之前,該變量都是不可用的。這在語法上,稱為暫時性死區。使用var聲明的變量不存在暫時性死區。
(6)初始值設置: 在變量聲明時,var 和 let 可以不用設置初始值。而const聲明變量必須設置初始值。
(7)指針指向: let和const都是ES6新增的用于創建變量的語法。 let創建的變量是可以更改指針指向(可以重新賦值)。但const聲明的變量是不允許改變指針的指向。
(8)const對象的屬性可以修改嗎:
const保證的并不是變量的值不能改動,而是變量指向的那個內存地址不能改動。對于基本類型的數據(數值、字符串、布爾值),其值就保存在變量指向的那個內存地址,因此等同于常量。
但對于引用類型的數據(主要是對象和數組)來說,變量指向數據的內存地址,保存的只是一個指針,const只能保證這個指針是固定不變的,至于它指向的數據結構是不是可變的,就完全不能控制了。
參考
- https://blog.csdn.net/m0_52122230/article/details/129299923