javascript - 问一道js的基础题
高洛峰
高洛峰 2017-04-11 11:17:14
[JavaScript讨论组]
function setName(obj){
    obj.name = "obama";
    obj = {name:"clinton"};
}
var president = {name:"bush"};
setName(president);

执行完只段代码以后president.name的值为什么是"obama"
记得javascript高级程序设计中讲过,就是忘记在哪页了

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
迷茫

一句一句的分析代码:

var president = {name:"bush"};

president指向{name:"bush"}对象

setName(president);

obj指向president指向的对象, 也就是{name:"bush"}

obj.name = "obama";

obj指向的对象(也就是president指向的对象)的name属性值改为"obama"

obj = {name:"clinton"};

obj的指向从{name:"obama"}对象改为了{name:"clinton"}对象
president仍然指向{name:"obama"}对象

PHP中文网

说下我的理解:president被以引用传递的方式传了过去,所以obj.name更改的是原来的object,后边一句仅仅是将这个引用覆盖为新的对象,并未影响到外层的president!

未实测,供参考!

大家讲道理

只说关键的:

function setName(obj){
    obj.name = "obama";
    obj = {name:"clinton"};
}

最后一行赋值语句做的事情是将obj指向了一个新的对象{name:"clinton"},而obj原先指向的对象并没有受影响,还在原来的内存里保存着。

大家讲道理

因为你是整个对象传递进去,不属于基本的数据类型,在内存占有固定的位置。所以obj.name="Obama“

阿神

其实很简单,你这个相当于把对象作为参数传进去,无非是实参和形参的问题,你那个对象相当于obj,那么你说obj.name是啥?自然不就出来了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号