【发布时间】:2023-03-29 04:09:01
【问题描述】:
让我们看一下代码:
Test() {
let array1 = new Array(5).fill({ a: 0 })
let array2 = new Array(5).fill({ a: 0 })
for (let i = 0; i < 5; i++) {
setTimeout(() => {
array1[i].a = i
array2[i] = {a:i}
console.warn("array = ", array1)
console.warn("array2 = ", array2)
}, 0.2 * i)
}
}
在这种情况下,我想为array1和array2分配一系列值,有两种方法可以做到这一点,这会导致完全不同的结果。
在array1[i].a = i的情况下,运行完所有代码后,结果是array = [{a:4},{a:4},{a:4},{a:4},{a:4}],这不是我想要的。
在第二种情况下array2[i] = {a:i},结果将是[{a:0},{a:1},{a:2},{a:3},{a:4}],正如预期的那样。
我想知道为什么会这样?这种现象背后的机制是什么?
谢谢。
【问题讨论】:
标签: javascript