function funcArr(arr){
var res = arr;
res.pop();
alert(arr === res);
}
funcArr([1,2,3]) // true
function funcNum(num){
var res = num;
res++;
alert(num === res);
}
funcNum(3) // false
在funcArr中复制了参数arr,函数体内res与arr一起变化(最后res=[1,2];num=[1,2]);
在funcArr中复制了参数num,函数体内res与num变化是独立的(最后res=4;num=3);
原因?
基本类型和对象类型能一样吗?
function funcArr(arr){
var res = arr;//把arr的引用赋给res,res和arr自然是引用了同一个对象,即使arr重新指向其他对象 res === arr依然成立。
res.pop();
alert(arr === res);
}
funcArr([1,2,3]) // true
function funcNum(num){
var res = num;//把num的值赋给了res,res和num两个就是相互独立的,对res任何操作都不影响num
res++;
alert(num === res);
}
funcNum(3) // false
javascript的函数参数传递都是值传递。
实际上第一个传进去的是数组的地址,所以对同一地址的数据进行修改必然能够改变传入参数数组的数据。
而第二个实际只传入值,所以对传入的参数不会有影响。