参数传递
参数实际上是函数的局部变量
参数是按值传递的:
向参数传递基本类型值-被传递的值会被复制给一个局部变量(即命名参数,就是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时,这个变量引用的就是一个局部对象了,而这个局部对象会在函数执行完毕后立即被销毁。
浙公网安备 33010602011771号