原始值存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。 // 变量访问的位置是什么意思?原始值存储在变量处的值是什么?希望能和下面的引用值存储在变量处的值做一个类比。麻烦以通俗的话语解释,欢迎多举例子,这样好理解。引用值存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。/* 引用值指的是对象吗?这里说的存储在变量处的值为一个指针,指针怎么理解?/*
1 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
背这种概念在初学时意义不大
多写代码就能理解了
简单说明下, ECMAScript有以下基础数据类型
Function, Object, String, Number, Boolean, Undefined
Object也可以细分出Array, RegExp等对象类型
只有Function, Object被当作heap中的对象, 它的特点是你可以增添其键值对
例如
Func = function(){}
Func.test = 'test'
console.log(Func.test)
这就产生了把它作为参数传递时的问题, 因为对象的可以引用自身
比如
A = [0,1,2]
A[1] = A
console.log(A + '')
B = A
B[1] = 1
console.log(A + '')
那麽就无法通过简单的操作复制一个对象, 於是以上的Func, A都只存储一个指针
而对於其它类型的数据, 都可以通过有限的步骤, 高效的复制
比如
N = 0
M = N
++N
console.log(M)
可以看出此处M, N所指向的数据空间是不同的
当然在某些浏览器中, 为了字符串的高效操作, 它把长度较小的字符串全部放进内存特定位置, 用於减少复制产生的消耗
更简单的讲, 就是
stack中值在传递/赋值等操作时是产生新的副本的
heap不会产生新的副本
当然, 解释内核的详细解析情况, 参阅ECMA-262.pdf
添加回答
举报
0/150
提交
取消