WuXianSen666 2019-01-27 21:44 采纳率: 50%
浏览 476
已采纳

函数中新建数组的问题

var arr=[1,2,3];
function change(arr){
arr=new Array(100,200,300);
}
change(arr);
console.log(arr[0]);

我知道最后arr[0]输出是1,可是change(arr)中已经给新的数组赋值了,那用什么表示新的数组呢,名字都是arr啊

  • 写回答

2条回答

  • 天际的海浪 2019-01-27 21:52
    关注

    change(arr)中新赋值的是局部变量arr,全局变量arr没有改变

    回复:
    js中对象和数组是按引用地址传递的。
    当把一个数组从一个变量传递到另一个变量中时,两个变量都指向这同一个数组的引用地址。

    var a=["a","b","c"];
    var b=a; //a和b变量都指向同一个数组的引用地址。
    

    当对数组的元素赋值时,实际上是先读取变量中的引用地址找到数组,再改变这个数组的元素。
    这样之后再用另一个变量中的引用地址所找到的也是这同一个数组,会获取到一样的数组内容。

    b[1]="f";
    alert(b); //输出 a,f,c
    alert(a); //输出 a,f,c
    

    但是这种引用只在读取变量时有效,当对变量重新赋值时,原有的引用就会断开。

    b=["x","y","z"]; //b变量重新指向一个新数组的引用地址。不会影响到a变量。
    alert(b); //输出 x,y,z
    alert(a); //输出 a,f,c
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办