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

为什么以下代码输出结果为2?

为什么以下代码输出结果为2?

萧俊介 2017-06-08 15:22:08
<script> var b = {b:1}; function addB(b){ b.b++; b={}; b.b=3; } addB(b); console.log(b.b); </script>
查看完整描述

1 回答

?
Caballarii

TA贡献1123条经验 获得超629个赞

addB(b)传入的是b的地址的复制,所以b={}并不会改变函数外面的b的引用,但因为外面的b和里面的b一开始指向的是同一个地址,所以在函数里面先调用了b.b++;外面的b也就随着改变了

查看完整回答
1 反对 回复 2017-06-08
  • 萧俊介
    萧俊介
    既然传递的是地址,也是指向的同一个地方。b.b++;可以改变外面b的值,为什么b={};就不行呢?
  • Caballarii
    Caballarii
    b.b++没有改变b本身的值,b里面的变动在函数外依然有效。b={}改变了b的值,再在新的b里面改东西在函数外就无效了
  • 萧俊介
    萧俊介
    非常谢谢!只可惜我是先从下面的大神那知道答案的,所以采纳只好给他了。
  • 1 回答
  • 0 关注
  • 2036 浏览
慕课专栏
更多

添加回答

举报

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