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啊
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啊
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