var a = {name:"1"}
function fn(obj){
obj.name = "2";
obj = {name:"3"};
}
fn(a);
a.name // "2"
为什么输出是2
var a = {name:"1"}
function fn(obj){
obj.name = "2";
obj = {name:"3"};
}
fn(a);
a.name // "2"
为什么输出是2
var a = {name:"1"}
是让变量a
引用内存中的一个对象{name:"1"}
。调用fn(obj)
时,变量obj
对{name:"1"}
进行引用,然后执行obj.name = "2";
修改了引用对象的name
属性。obj = {name:"3"};
是让变量obj
引用内存中一个新的对象{name:"3"}
。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答872 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
楼上说的还不够详细。
这里涉及到
arguments
,在对obj
赋值之前,obj
也就是一直都是对
a
的引用,赋值操作断开了这个引用链,为obj
重新指定了一个引用即一个新的对象{name:'3'}