【发布时间】:2020-11-22 16:29:51
【问题描述】:
有人可以解释一下,为什么代码会这样吗?我编写了一个测试函数来说明我在代码中更大规模的问题。我希望“b”保留值 [1,2,3],然后使用 math.random 函数将“a”更新为 [2,2,3]。但是两者都得到了更新,我不明白为什么。如何在不更新的情况下将值 [1, 2, 3] 保存在 b 中?
let a = [1, 2, 3]
let b = []
function assignB() {
b = a
}
function reassignA() {
console.log(b) // [1, 2, 3]
let randomNumber = Math.floor(Math.random() * a.length)
if (a[randomNumber] == 1) {
a[randomNumber] = 2
console.log(b) // [2, 2, 3]
} else {
reassignA()
}
console.log(b) // [2, 2, 3]
}
function test() {
assignB()
reassignA()
}
test()
【问题讨论】:
-
a 和 b 在此处具有相同的数组引用。将数组分配为 'b = [...a]' 应该可以解决问题。
标签: javascript arrays let