请教一个问题,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互相嵌套,这个地址,又保存在哪里
请教一个问题,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互相嵌套,这个地址,又保存在哪里
这个和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]存的都是同一个内存地址
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决