函数内的let变量被赋值问题
const j = [1, 2, 3, 4]
function aa() {
let i = j
i.splice(0, 1)
}
aa()
console.log(j);
[2,3,4]
j是赋值使用的常量为什么也会被splice啊
把j这种方法赋值是浅拷贝,i和j都指向[1, 2, 3, 4]的位置,修改的是同一条数据,参考一下深浅拷贝
let i = [...j]
对你有用的话,请点击一下【采纳此答案】,谢谢🌹
是因为常量被赋值的是数组的引用,实际上是一个地址,这个地址自身没有发生变化,但是地址指向的数组是被改变了的。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!这涉及到深拷贝和浅拷贝,你直接赋值等于现在i和j都指向同一个数组,而splice是会改变原数组的函数,所以这指向的同一个数组就被改变了。
1、const申明数组时,将数组的内存地址申明为常量,数组中的值仍可以改变。
因此,如果将数组j重新进行赋值 j = [],则会报错。
2、数组j赋值给i,对i的操作会改变j中的值。因为只是将j的内存地址进行了赋值,i和j实际指向的是同一个数组。