3-4的第三个选择题没弄明白
来源:3-10 参数传递和类型检测
wubinking
2017-12-29 09:40:49
var b = a之后,a和b都是引用类型(堆内存里面存储了一个[4],而栈内存里面存储了两个指向[4]的地址),为什么a=[4,44]之后(我的理解堆内存里面的数据发生了变化[4]变为[4,44],b地址指向的也是这个[4,44]啊),但是b不是[4,44],而是[4]。
3回答
一路电光带火花
2017-12-29
建议你可以将老师这节课中举得一些小栗子再听听,面向对象这块会有点难,需要多听多想,得自己写写代码多思考
引用类型的值发生变化时,指向会变化。引用类型你应该知道吧,就是除了基本类型意外,其余都是引用类型。
引用类型比如,var a={},这就是引用类型,a指向的就是{};
如果再让a={1,3},那么a指向的就是{1,3},{}和{1,3}是不同的对象,存放在堆里不同的空间。
如果通过方法给这个对象添加属性或者是值,这个对象在堆的空间位置没有变化,只是对象成员有添加,这个a还是指向这个对象。
小丸子爱吃菜
2017-12-29
因为a重新被赋值为[4,44],所以它的指向重新发生变化了。
b.push方法可向数组的末尾添加一个或多个元素,所以b原有的对象没有发生变化。
小丸子爱吃菜
2017-12-29
a=[4]表明a指向了对象[4],将a赋值给b,那么b此刻也指向了对象[4],a的指向发生变化,指向[4,44],但是b还是指向[4],所以打印出来的b是[4]。
祝学习愉快!
相似问题