首页 > 函数作用域内复制

函数作用域内复制

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的函数参数传递都是值传递。

实际上第一个传进去的是数组的地址,所以对同一地址的数据进行修改必然能够改变传入参数数组的数据。

而第二个实际只传入值,所以对传入的参数不会有影响。

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