javascript中的函数参数传递
看到一javascript题,如下:
function setname(obj){
obj.name = 'aaa';
obj = new Object();
obj.name = 'bbb';
}
var me = new Object();
setname(me);
console.log(me.name) // 'aaa'
为什么不是'bbb'呢?没猜错的话,应该上面的代码应该等同于下面这段:
function setname2(){
var obj;
obj = Array.prototype.slice.call(arguments)[0];
obj.name = 'aaa';
obj = new Object();
obj.name = 'bbb';
}
var me2 = new Object();
setname2(me2);
console.log(me2.name);
这样就可以很直观的看出我什么在将me做为参数传给setname调用后,me.name是aaa,而不是bbb。
引用MDN中对函数调用的解释:
调用函数时,传递给函数的值被称为函数的实参(值传递),对应位置的函数参数名叫作形参。如果实参是一个包含原始值(数字,字符串,布尔值)的变量,则就算函数在内部改变了对应形参的值,返回后,该实参变量的值也不会改变。如果实参是一个对象引用,则对应形参会和该实参指向同一个对象。假如函数在内部改变了对应形参的值,返回后,实参指向的对象的值也会改变
所以当实参是引用类型的对象的时候,如果对形参重新赋值,就会不再与实参指同一个对象,那么后面的obj.name = 'bbb'就不会跟实参me有关联。
关键字:实参, 函数, JavaScript, obj
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!