js复制时是传递引用还是传递值

下面代码


var a=[1,2,3];
var b=a;
a[0]=[4];
alert(b);//4,2,3

var a=[1,2,3];
var b=a;
a=[4,2,3];
alert(b);//1,2,3
阅读 2.8k
3 个回答

不是原始类型的值在赋值就是引用传递

基本类型是值传递,相当于复制了一份。引用类型其实也是复制,只不过值比较特殊,是指针或者叫做引用,所以a和b指的是一块内存地址,对a[0]修改相当于对b[0]修改。但你第二个例子,相当于从新申请了内存空间,此时,a和b已经不再指向同一块内存。

第一部分应该没疑问吧,a[0] = 4表示a数组的0下标位置被换成了4

第二部分最后输出结果令人意外是因为,一开始的b = a表示b现在和a一样,都指向相同的内存数组对象[1, 2, 3]。而之后的a = [4, 2, 3]表示将a变量的指向到了另一个内存数组对象[4, 2, 3]上,这时候实际上ab已经是完全不同指向的变量了,所以你会看到这样的结果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题