为了账号安全,请及时绑定邮箱和手机立即绑定

javascript值传递疑惑

javascript值传递疑惑

青春有我 2019-03-23 15:15:46
以前一直以为,给函数传递了对象,那么在函数体内对对象属性的更改,必然可以在全局反映出来。比如:var setName=function(o){  o.name='xiaoha';};var o1={};setName(o1);console.log(o1.name);//'xiaoha'这没错啊,运行结果跟自己想的一模一样的。可是看了高程3后,发现想错了。如下:var setName=function(o){  o.name='xiaoha';  o={};  o.name='22222';};var o1={};setName(o1);console.log(o1.name);//'xiaoha'这个怎么解释,才能让人心服口服啊!高程3解释,还是不懂啊!
查看完整描述

6 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

参数 o 是 o1 所引用的对象的引用
o = {} 是 改变了 o 的引用, o1 和它引用的对象都不受影响

https://img1.sycdn.imooc.com//5cb181aa0001765113560928.jpg

查看完整回答
反对 回复 2019-04-13
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

https://img1.sycdn.imooc.com//5cb181b8000156f006340270.jpg

查看完整回答
反对 回复 2019-04-13
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

楼上的解释很清晰。

其实这种直接修改参数的方式应该避免,很容易bug的。应该通过函数返回结果。


查看完整回答
反对 回复 2019-04-13
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这个和python差不多,o=o1 o.name='xiaoha' o={}#改变引用 o.name='22222'


查看完整回答
反对 回复 2019-04-13
?
炎炎设计

TA贡献1808条经验 获得超4个赞

JS中都是参数传递都是传值的,只不过是在涉及到对象时,传的是地址信息
当一个对象标识符被重新赋值时,其对应的地址就会发生变化,对应到不同的地址空间上
而原始标识符对应的地址没有被修改,所以就这样了~~~~

查看完整回答
反对 回复 2019-04-13
  • 6 回答
  • 0 关注
  • 549 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信