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中函数的参数想象成局部变量。