为什么互相引用不会销毁?
这里函数执行结束后就被销毁,为什么xm和xh的值变为null,而不是直接消失呢?就是我觉得应该是变为和声明它们之前一样的状态才对啊,就比如这里没有声明也没有用到的变量a一样的状态。
而且函数销毁了,xm和xh的值变为null,它们的那个属性不应该也清空吗?变为null或者变为我上面说的那种消失状态,怎么还存在互相引用呢?
正在回答
同学你好,解答如下:
视频和练习是不一样的。课程讲解的是循环引用.以前浏览器用的引用计数,引用计数有个问题,就是循环引用计数无法全部清除,这个是浏览器自身机引用计数制造成的。(这个机制现在不用了,所以稍微了解一下即可)
xm和xn是fn函数中的局部变量,所以fn调用之后,xm和xn就解除了引用,也就是xm=null,和xh=null。但是xm和xh对象中的wife和husband属性也引用了xh和xm,所以调用fn之后只解除了一次引用,并不能完全解除引用,这就是相互引用出现的问题。
本题中没有使用循环引用,所以不会有这个现象。如果一个对象的被清除了,这个引用地址就没有了,它们的属性肯定是随着对象的清空也就没有了。
同学可以再理解一下,如果实在理解不了的话,可以先把这个知识放一放,等到后面同学接触的多了有一定的知识体系的时候再回过头来研究一下,会更好理解。
祝学习愉快~
比如后面的第二个选择题,答案解析如下:
下面是数组[4]被引用的过程以及被引用次数的变化:
var a = [4]; // 1次
var b = a; // 2次
b = {}; // b的指向变了,所以是1次
b.arr = a; // 又被指向了1次,所以是2次
b = null; //b被清空了,所以最后是1次。
这里b=null被清空了,所以b.arr就没有再引用了,引用次数减一
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星