下面代码
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
下面代码
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]
上,这时候实际上a
和b
已经是完全不同指向的变量了,所以你会看到这样的结果
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
不是原始类型的值在赋值就是引用传递