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条)

报告相同问题?

悬赏问题

  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂