参数传递

参数实际上是函数的局部变量

参数是按值传递的:

向参数传递基本类型值-被传递的值会被复制给一个局部变量(即命名参数,就是arguments对象中的一个元素)

function addTen(num){
    num += 10;
    return num;
}    
var count = 20;
var result = addTen(count);
console.log(count);   //20  在函数内部参数num被加上了10,但不会影响函数外部的count变量。
console.log(result );  //30

 

向参数传递引用类型值-会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。

如下面向参输传递对象

function setName(obj){
    obj.name = "wxc";            
}
var person = new Object();
setName(person);
console.log(person.name);  //wxc

 以上代码中创建了一个对象,将其保存在了变量person中,然后这个对象被传递到setName()函数中之后就被复制给了obj.在函数内部obj和person引用的是同一个对象。于是当在函数内部为obj添加name属性后,函数外部的person也将有所反映;因为person指向的对象在堆内存中只有一个,且是全局对象。

下面的例子更说明了参数按值传递

function setName(obj){
  obj.name = "wxc";
  obj = new Object();    //重新定义了一个对象,
  obj.name = "henji";    //为该对象定义了一个带有不同值得name属性
}
var person = new Object();
setName(person);
console.log(person.name);  //wxc 说明即使在函数内部修改了参数的值,但原始的引用仍然保持不变,实际上 当函数内部重写obj时,这个变量引用的就是一个局部对象了,而这个局部对象会在函数执行完毕后立即被销毁。

 

posted on 2018-02-06 17:35  henji1122  阅读(113)  评论(0编辑  收藏  举报

导航