在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ es6的const定義的常量不能更改該怎么理解?

es6的const定義的常量不能更改該怎么理解?

在看const定義常量的時候發(fā)現(xiàn),const定義基本類型的時候,再改變該值會報錯,但是定義對象或數(shù)組的時候,對象和數(shù)組改變卻不會報錯,es6里的解釋是const保存的是指向數(shù)組或?qū)ο蟮闹羔?。我又搜了下棧?nèi)存和堆內(nèi)存,發(fā)現(xiàn)其實變量保存的基本類型和引用類型的指針都是放在棧內(nèi)存里的,const實質(zhì)是不是就是棧內(nèi)存不能變,而對象和數(shù)組的指針存在棧內(nèi)存里沒變,但是存在堆內(nèi)存的數(shù)據(jù)本體隨便更改是沒事的?

回答
編輯回答
擱淺

1,如果是值類型,值不可變
2.如果是引用類型,地址不可變

2017年8月18日 01:27
編輯回答
柒槿年

一句話:指針不變
簡單來說:不能再用=。但是對于數(shù)組、對象、函數(shù)、正則、Set、Map之類的可以更改、刪除屬性(configurable為true的情況)

2018年6月27日 09:46
編輯回答
笑忘初

跟堆與棧沒有關(guān)系, 真正的區(qū)別在于簡單數(shù)據(jù)類型引用數(shù)據(jù)類型的差異

假設(shè)有兩個變量aobj,分別是Number和Object類型

var a = 2
var obj = {
    prop: 5
}

嚴(yán)格來說, JS并沒有區(qū)分什么數(shù)據(jù)類型放在堆,什么數(shù)據(jù)類型放在棧(不過你可以這么想, 這里我們就假設(shè)簡單數(shù)據(jù)類型是在,引用數(shù)據(jù)類型是在

整個內(nèi)存的分配你可以這么假想(實際的比這復(fù)雜得多):

  1. 對于a, 就是棧上存一個a變量, a存儲的值為2
  2. 對于obj,可以拆分成兩部分, 一部分是堆中(也就是{prop: 5})這一部分, 另一部分在棧中(obj這一部分)。
  3. 這里我們不分析堆中的, 只管棧這一部分,那么obj可以看成是一個存儲這地址的“簡單數(shù)據(jù)類型”(因為一個地址占的字節(jié)數(shù)和簡單數(shù)據(jù)類型差不多),obj的值為0x10000000這樣
  4. 假設(shè)執(zhí)行obj.prop = 6, 實際上是改變了{(lán)prop: 5}這一部分, 而obj的值并沒有改變。依然是0x10000000, 數(shù)組的原理與之類似
  5. 當(dāng)你執(zhí)行obj = {key: 'foo'}, 是在堆中開辟了一個新的對象,然后把地址賦給了obj, 那obj的值肯定就變了, 那以前{prop: 5}這一部分去哪里了呢? 被垃圾回收給清除了
2017年12月14日 19:01