javascript中的传递参数

同java一样,javascript中参数也只有值传递。这点同变量的访问不同,变量的访问可以有按值和按引用两种方式。以下分为基本数据类型和引用数据类型说明。

1.基本数据类型

 在向参数传递基本数据类型的值时,被传递的值会被复制给一个局部变量(命令参数,或者是argument对象中的一个元素)。

1 function addTen(num){
2       num += 10;
3       return num;
4     }
5     var count = 20;
6     var result = addTen(count);
7     alert(result); //30
8     alert(count)  //20,没有变化

在调用函数时,变量count作为参数传递给函数,这个变量的值是20。数值20被复制给参数num以便在函数内部使用。在函数内部num被加了10,但是并不会影响到count变量。

count和num的相互独立,仅仅是具有相同的值而已。如果是按照引用传递的话,变量count的值应该为30,所以。。。。

2.引用类型

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

function setName(obj){
       obj.name = "nick";
    }
    function setNameEx(obj){
       obj = new Object();
       obj.name = "grge";
    }
    
    var person = new Object();
    setName(person);
    alert(person.name); //nick
    setNameEx(person);
    alert(person.name);//nick

可以看出,在setName函数中,obj和person引用的是同一个对象,所以obj添加name值会反映在person。在setNameEx中,obj对象重新定义了一个对象,这样他指向的对象就和person不一样了,所以他添加name值并不会影响到person。如果是引用传递的话,person就会自动被修改为指向name属性为“grge”的对象。

可以把javascript中函数的参数想象成局部变量。

posted @ 2012-11-22 12:10  lanse_yan  阅读(11619)  评论(0编辑  收藏  举报