前端学习之——js函数参数按值传递

在JavaScript里函数参数能够任何类型,对于非引用类型的变量以值传递很好理解,在向参数传递基本类型的值时,被传递的值会被复制给命名参数,即arguments对象数组的中一个元素,以下:javascript

var a = 1;
function add(num){ num++; return num; } var b = add(a);
console.log(c); //2
console.log(a); //1 未改变

这能够看出在把a以参数传给add函数时,先把a复制一份传给argument命名参数,根据基本类型数据的特性,复制基本类型数据后是彻底两个独立的个体,只是值相同而已,互不影响。java

接下来看若是参数为复杂类型数据,如object时,以下:数组

var obj = {
    name: "小白"  
}
function change (obj) {
  obj.name = "小黑";
  return;
}
change(obj);
console.log(obj.name); //小黑

这样乍一看好像是引用传参,但写下来在看下列代码:  函数

var obj = {
    name: "小白"  
}
function change (obj) {
  obj.name = "小黑"
  obj = new Object();   obj.name = "大黄";   return; }
change(obj); console.log(obj.name); //小黑

其实当参数为引用类型数据时,它也是按值传递的,只是根据对象的特性,但复制一份obj时,两个对象都指向同一个地址,所以在第二个代码示例里,change里改变了obj.name时,它指向的地址也被改变,全局变量obj的name属性天然也改变了。第三个代码示例里也证实了js函数参数是按值传递,若是是引用传参的话,第三个代码示例结果的console出来的应该是“大黄”了。  对象

相关文章
相关标签/搜索