function setName(obj){
obj.name = "obama";
obj = {name:"clinton"};
}
var president = {name:"bush"};
setName(president);
执行完只段代码以后president.name的值为什么是"obama"
记得javascript高级程序设计中讲过,就是忘记在哪页了
function setName(obj){
obj.name = "obama";
obj = {name:"clinton"};
}
var president = {name:"bush"};
setName(president);
执行完只段代码以后president.name的值为什么是"obama"
记得javascript高级程序设计中讲过,就是忘记在哪页了
说下我的理解:president被以引用传递的方式传了过去,所以obj.name更改的是原来的object,后边一句仅仅是将这个引用覆盖为新的对象,并未影响到外层的president!
未实测,供参考!
只说关键的:
function setName(obj){
obj.name = "obama";
obj = {name:"clinton"};
}
最后一行赋值语句做的事情是将obj
指向了一个新的对象{name:"clinton"}
,而obj
原先指向的对象并没有受影响,还在原来的内存里保存着。
13 回答12.6k 阅读
7 回答1.8k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1k 阅读✓ 已解决
一句一句的分析代码:
president
指向{name:"bush"}
对象将
obj
指向president
指向的对象, 也就是{name:"bush"}
将
obj
指向的对象(也就是president
指向的对象)的name
属性值改为"obama"
把
obj
的指向从{name:"obama"}
对象改为了{name:"clinton"}
对象而
president
仍然指向{name:"obama"}
对象