【发布时间】:2021-11-10 10:33:35
【问题描述】:
我目前正在学习 js,偶然发现了这对我来说很奇怪的行为。我可能在这里遗漏了一些基本的东西,但我找不到答案。
我有一个修改数组并返回它的函数。如果我打印出原始数组会被修改,即使它是一个常量。
const arr = [5, 9, 7, 1, 8, ];
function test(arr) {
const strings = ['qwe', 'asd'];
arr.splice(1, 0, ...strings);
return arr
}
console.log(test(arr))
console.log(arr)
console.log(test(arr))
console.log(arr)
console.log(test(arr))
console.log(arr)
输出显示原始数组每次都变大。我期待它每次都是相同的输出。
【问题讨论】:
-
const arr表示标识符arr无法重新分配;这并不意味着您不能改变arr引用的对象(数组)。arr的重新分配和实际数组的突变是两件不同的事情。const与重新分配有关。 -
请注意,函数中的
arr与您在全局范围内定义的arr变量不同,函数参数为函数创建局部变量。如果你在函数中使用arr = 1,那将起作用(全局arr不会改变)。 -
const创建一个不可变的绑定,而不是一个不可变的值。 Google 查找更多相关帖子:Keyword 'const' does not make the value immutable. What does it mean?、JavaScript ES6const a = {}is mutable. Why?。
标签: javascript arrays function constants