function setName(obj){ obj.name = "小明"; obj = new Object(); } var person = new Object(); setName(person); console.log(person.name); //输出小明,为什么不是undefined
认证高级PHP讲师
根据楼上所说的,我插一张图帮助大家理解:
// 简单说,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。如果你会画图的话,你就会更明白。
Is JavaScript a pass-by-reference or pass-by-value language?
啊~总算明白了,谢谢大家
占个坑,特想问问这种问题,怎么和不知道的人解释清楚 直观形象,不要搞些高深的长篇大论
根据楼上所说的,我插一张图帮助大家理解:
一步步来分析,一开始声明了person这个引用指向了Object对象,然后传参给了obj,那么obj和person对指向了Object对象,然后你将obj的引用重新赋值了新的Objcet对象,但是person还是没有发生改变的。所以输出的还是小明,而不是undefined。如果你会画图的话,你就会更明白。
Is JavaScript a pass-by-reference or pass-by-value language?
啊~总算明白了,谢谢大家
占个坑,特想问问这种问题,怎么和不知道的人解释清楚 直观形象,不要搞些高深的长篇大论