函数内的let变量被赋值问题

问题遇到的现象和发生背景

函数内的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]

对你有用的话,请点击一下【采纳此答案】,谢谢🌹

是因为常量被赋值的是数组的引用,实际上是一个地址,这个地址自身没有发生变化,但是地址指向的数组是被改变了的。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

这涉及到深拷贝和浅拷贝,你直接赋值等于现在i和j都指向同一个数组,而splice是会改变原数组的函数,所以这指向的同一个数组就被改变了。

img

1、const申明数组时,将数组的内存地址申明为常量,数组中的值仍可以改变。
因此,如果将数组j重新进行赋值 j = [],则会报错。
2、数组j赋值给i,对i的操作会改变j中的值。因为只是将j的内存地址进行了赋值,i和j实际指向的是同一个数组。