3-4的第三个选择题没弄明白

3-4的第三个选择题没弄明白

http://img1.sycdn.imooc.com//climg/5a4599c40001e02606890677.jpgvar b = a之后,a和b都是引用类型(堆内存里面存储了一个[4],而栈内存里面存储了两个指向[4]的地址),为什么a=[4,44]之后(我的理解堆内存里面的数据发生了变化[4]变为[4,44],b地址指向的也是这个[4,44]啊),但是b不是[4,44],而是[4]。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
一路电光带火花 2017-12-29 14:22:18

建议你可以将老师这节课中举得一些小栗子再听听,面向对象这块会有点难,需要多听多想,得自己写写代码多思考

引用类型的值发生变化时,指向会变化。引用类型你应该知道吧,就是除了基本类型意外,其余都是引用类型。

引用类型比如,var a={},这就是引用类型,a指向的就是{};

如果再让a={1,3},那么a指向的就是{1,3},{}和{1,3}是不同的对象,存放在堆里不同的空间。

如果通过方法给这个对象添加属性或者是值,这个对象在堆的空间位置没有变化,只是对象成员有添加,这个a还是指向这个对象。


  • 提问者 wubinking #1
    好的,谢谢。
    2017-12-29 15:01:24
小丸子爱吃菜 2017-12-29 13:42:18

因为a重新被赋值为[4,44],所以它的指向重新发生变化了。

b.push方法可向数组的末尾添加一个或多个元素,所以b原有的对象没有发生变化。


  • 提问者 wubinking #1
    你这因为所有讲的不是很能让人理解,可以讲的再明白点吗?为什么重新被赋值就发生变化,加元素就不发生变化;还有在什么情况下指向会发生变化,什么情况下指向不会发生变化吗?
    2017-12-29 13:53:51
小丸子爱吃菜 2017-12-29 11:32:09

a=[4]表明a指向了对象[4],将a赋值给b,那么b此刻也指向了对象[4],a的指向发生变化,指向[4,44],但是b还是指向[4],所以打印出来的b是[4]。

祝学习愉快!

  • 提问者 wubinking #1
    那为什么a=[4,44]会使a的指向发生变化,b.push(44)不会使b的指向发生变化。同样是改变自己的值
    2017-12-29 11:37:57
  • 提问者 wubinking #2
    可以说下,在什么情况下指向会发生变化,什么情况下指向不会发生变化吗?老师
    2017-12-29 11:40:36
  • a=[4,44]这种创建函数的方式,相当于重新new了一个数组对象,原对象和新对象肯定是不等的,因为地址发生了改变。因此a的变化不会影响b-->[4] b.push(44),这种方式的改变只不过是在原来的对象上添加了一些数据而已,地址指向并不会发生改变。所以b的变化会影响a-->[4,44]
    2018-04-13 10:31:53
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师