js函数参数按值传递的理解

例子选自《javas高级程序设计》

1.基本类型按值传递

function addTen(num) {  
num += 10;  
return num;  
}  
var count = 20;  
var result = addTen(count);  
alert(count); //20,没有变化  

alert(result); //30  

在执行addTen(count)时,将20这个值复制一份传递到了num中,addTen运行后,num为30,于是result等于30,而count依然是20

  1. 引用类型值的传递
       var person=new Object();
       function setName(obj){
           obj.name='Nicholas';
           obj=new Object();
           obj.name='Greg';
           return obj;

       }
       var result=setName(person);
       console.log(person.name);//Nicholas
       console.log(result.name);//Greg

setName运行后,将person的引用复制一份,使得参数中的obj指向了与person相同的引用,此时修改obj.name的值,person.name也会变,接下来再将obj指向一个新的对象,这个时候person和obj已经没有关系,person.name的值不会改变

总结:函数参数传递过程中之所以说传递值,即相当于复制了一份给参数;假如是引用,则函数中的参数和传入值完全是同一个值,那么后面对obj修改,person的值都会随之改变,而验证结果并没有因为obj指向了新对象就变,所以引用的传递还是按值传递,或者说,把引用的地址复制了一份给参数

猜你喜欢

转载自blog.csdn.net/yangyuqingabc/article/details/80739640
今日推荐