1 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個贊
背這種概念在初學(xué)時意義不大
多寫代碼就能理解了
簡單說明下, ECMAScript有以下基礎(chǔ)數(shù)據(jù)類型
Function, Object, String, Number, Boolean, Undefined
Object也可以細(xì)分出Array, RegExp等對象類型
只有Function, Object被當(dāng)作heap中的對象, 它的特點(diǎn)是你可以增添其鍵值對
例如
Func = function(){}
Func.test = 'test'
console.log(Func.test)
這就產(chǎn)生了把它作為參數(shù)傳遞時的問題, 因?yàn)閷ο蟮目梢砸米陨?br/>比如
A = [0,1,2]
A[1] = A
console.log(A + '')
B = A
B[1] = 1
console.log(A + '')
那麼就無法通過簡單的操作復(fù)制一個對象, 於是以上的Func, A都只存儲一個指針
而對於其它類型的數(shù)據(jù), 都可以通過有限的步驟, 高效的復(fù)制
比如
N = 0
M = N
++N
console.log(M)
可以看出此處M, N所指向的數(shù)據(jù)空間是不同的
當(dāng)然在某些瀏覽器中, 為了字符串的高效操作, 它把長度較小的字符串全部放進(jìn)內(nèi)存特定位置, 用於減少復(fù)制產(chǎn)生的消耗
更簡單的講, 就是
stack中值在傳遞/賦值等操作時是產(chǎn)生新的副本的
heap不會產(chǎn)生新的副本
當(dāng)然, 解釋內(nèi)核的詳細(xì)解析情況, 參閱ECMA-262.pdf
添加回答
舉報