Es6 之 你覺得你知道的 const 關鍵字

es6中新增了一個const。就是用來定義一個常量的。之前其實一直沒有把這個放在 心上,以爲就是定義一個常量的,很easy,沒有什麼能夠深刻的。es6

問題來了:瀏覽器

let obj = {'num1' : 20, 'num2' : 30}  
const obj1 = obj  
const num = obj.num1   
obj.num1 = 40

那麼,試問這時候若是輸出obj1 和 num的值,分別是多少呢?讓咱們在谷歌瀏覽器中試驗一下spa

clipboard.png

答案很顯而易見了。在obj的num1屬性值改變了之後,obj1的值是隨着對象的改變而改變了,可是num的值卻並無改變。也就是說:code

const定義的對象,當對象改變了以後,const定義的值也會跟着改變。對象

cosnt定義的變量是一個對象的一個屬性值,可是當對象屬性值改變了之後,const定義的這個值並不會改變。blog

那麼這是爲了什麼呢?ip

在計算機中,常量是放在棧中的,而對象是放在堆中的。對於對象賦值,const指向的僅僅是他的地址,cosnt僅僅是保證這個地址不改變,至於地址對應的數據,是能夠進行改變的。舉個栗子,如今可能在外工做不少人都是租的房子,假如你住在a公寓的a單元101,cosnt就僅僅是保證他指向的是這個地址,至於你房子裏住的是哪些人,他是不關心的。~it

而若是定義一個簡單的數據類型,那這個數據他自己就是存在棧中的,因此不能夠改變。class

寫的有不合適的地方,歡迎指正,謝謝變量

相關文章
相關標籤/搜索