js push操作时,堆栈内存发生了什么

发布于 2022-09-13 00:51:58 字数 267 浏览 30 评论 0

请教一个问题,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

客…行舟 2022-09-20 00:51:58

这个和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]存的都是同一个内存地址

森林迷了鹿 2022-09-20 00:51:58

JS不像C每一行语句都能等价转为汇编
V8这样复杂的运行时内存状态基本是个混沌系统
琢磨这个没有太大意义

素食主义者 2022-09-20 00:51:58

可以参考该内容:

https://blog.csdn.net/weixin_...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文