首页 > js复制时是传递引用还是传递值

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

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


基本类型是值传递,相当于复制了一份。引用类型其实也是复制,只不过值比较特殊,是指针或者叫做引用,所以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已经是完全不同指向的变量了,所以你会看到这样的结果

【热门文章】
【热门文章】