javascript参数值传递问题

function setName(obj){
    obj.name = "小明";
    obj = new Object();
}

var person = new Object();
setName(person);
console.log(person.name); //输出小明,为什么不是undefined
阅读 4.3k
5 个回答

根据楼上所说的,我插一张图帮助大家理解:

clipboard.png

// 简单说,obj与person并不是同一个变量,是两个变量指向同一个地址
function setName(obj){
    // 相当于 person.name = "小明",因为是引用类型
    obj.name = "小明";
    // 此处把obj的地址改了,obj与person的引用已经完全不同,不会互相影响
    obj = new Object();
}

var person = new Object();
setName(person);
console.log(person.name); 

一步步来分析,一开始声明了person这个引用指向了Object对象,然后传参给了obj,那么obj和person对指向了Object对象,然后你将obj的引用重新赋值了新的Objcet对象,但是person还是没有发生改变的。所以输出的还是小明,而不是undefined。如果你会画图的话,你就会更明白。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题