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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部