我們現在爲什麼要選擇let、const,拋棄var呢?
作爲一個程序員,var簡直就是違背編程邏輯的一種用法。
JS會將聲明提前,而定義的值不會。
var time = 1;
var time = 2;
按理說,編譯器是不允許這樣的代碼出現的,會報already defined之類問題。
在js中,這竟然是允許的,所以說,在代碼量龐大的時候,我們很有可能是會忘記某一個變量是之前定義過的,後面的同名變量定義都會覆蓋之前的變量,後果是很嚴重的,如果你記憶力好的話,可以挑戰一下!
作用域
在這之前,我們有必要說明一下作用域問題。
var 是全局作用域或者是函數作用域,所以我們是在全局都可以取值的,並且是後面的變量定義會覆蓋前面的。
而let、const的作用域是塊作用域。
所以所,這兩種定義方式是不能重複定義的
而他倆之間的區別我們應該都知道,const是常量嘛,是不能修改的。
還有需要注意的一點,臨時性死區,在塊級作用域中,聲明要在使用之前。
值得注意的是,如果const定義了一個對象的話
const info = {
"name":"xiaoming",
"age" : 18
}
info.age = 20
如果儲存一個對象的話,其實儲存的是引用,是地址。
學習C的時候我們應該很明白這一塊,指針害人不淺
我們不可以修改該變量引用的對象,但是可以修改對象中的內容,如果連對象中的屬性也不能讓他修改的話,我們就要
const info = Object.freeze({"name":"peter","age":8
})
freeze就是凍結的意思嘛,所以就連屬性都不能修改了。