js push操作时,堆栈内存发生了什么
请教一个问题,js里一个数组被push进另一个数组的时候,堆内存里是怎么变化的
let a = []
let x = []
let y = []
x.push(a)
y.push(a)
如果修改a,则x和y的打印结果都会同样变化
而在x[0]中push内容,也会影响到y
x和y都指向一个内容,就像x数组和y数组都保存着a的地址一样
我知道在栈内存中a,x,y都分别保存着一个地址,但是如果是数组间互相引用的情况呢,就像上面的push互相嵌套,这个地址,又保存在哪里
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个和push无关,数组赋值给谁,这个内存就保存在哪里。地址指向内存空间,但不是具体的内存空间,就像家庭住址和房子一样
例子中声明了a、x、y三个数组,会在内存中分别开辟一块空间,存放数组,然后把空间地址如0x0001、0x0002、0x0003分别赋值给a、x、y。对a、x、y的取值操作,就是根据这个地址信息,到对应的内存中去取数据,向x、y中push a的时候,添加到x、y中的就是一个内存地址,而不是真正的数据,然后向x[0]中添加数据,发现x[0]是一个内存地址(引擎会识别是地址还是真实数据),就会先根据这个地址找到对应的数据,然后再对这个数据进行后续的添加操作。这时候在取值y[0]就会发现也改变了,因为y[0]和x[0]存的都是同一个内存地址
JS不像C每一行语句都能等价转为汇编
V8这样复杂的运行时内存状态基本是个混沌系统
琢磨这个没有太大意义
可以参考该内容:
https://blog.csdn.net/weixin_...