ECMAScript中所有函数的参数都是按值传递
访问变量有按值和按引用两张方式,而参数只能按值传递
例子:
function addTen(num){
num += 10; //在函数内部,参数num的值被加上了10,但这一变化不会影响函数外部的count变量
return num;
}
var count = 20;
var result = addTen(count);
alert(count); //20,没有变化,如果是按引用传递那会变成30
function setName(obj){
obj.name = "Nicholas";
obj = new Object();
obj.name = "Grey";
}
var person = new Object();
setName(person);
访问变量有按值和按引用两张方式,而参数只能按值传递
例子:
function addTen(num){
num += 10; //在函数内部,参数num的值被加上了10,但这一变化不会影响函数外部的count变量
return num;
}
var count = 20;
var result = addTen(count);
alert(count); //20,没有变化,如果是按引用传递那会变成30
alert(result); //30
如果使用对象,就不是很好理解
function setName(obj){
obj.name = "Nicholas";
obj = new Object();
obj.name = "Grey";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
如果person是按引用传递的,nameperson就会自动被修改为指向其name属性值为“Grey”的新对象。
但是,结果显示为“Nicholas”。这说明即使在函数内部修改了参数的值,但原始的引用仍然保持未变。
实际上,当在函数内部重写obj时,这个变量引用的就是一个局部对象。而这个局部对象会在函数执行完毕后立即被销毁。