下面代码
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
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
不是原始类型的值在赋值就是引用传递
基本类型是值传递,相当于复制了一份。引用类型其实也是复制,只不过值比较特殊,是指针或者叫做引用,所以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已经是完全不同指向的变量了,所以你会看到这样的结果