javascript参数值传递问题
PHP中文网
PHP中文网 2017-04-10 15:18:16
[JavaScript讨论组]
function setName(obj){
    obj.name = "小明";
    obj = new Object();
}

var person = new Object();
setName(person);
console.log(person.name); //输出小明,为什么不是undefined
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
PHPz

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

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?

啊~总算明白了,谢谢大家

天蓬老师

占个坑,特想问问这种问题,怎么和不知道的人解释清楚 直观形象,不要搞些高深的长篇大论

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

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