Vue组件销毁时为什么没有vm = null这样的操作?

Vue在组件销毁的方法里,执行到最后并没有把vm = null,这个vm上还是有很多东西,会一直存在内存吗/

阅读 1.9k
1 个回答

在JS中,一个对象只要没有被引用那么就会被回收,比如你定义了一个对象var obj = {x: 1};但是这个对象没有在任何地方被使用,那么它就会被GC掉,假设有另一个变量var obj2 = obj2引用了,但是obj2仍然没有被使用,它们都会被GC。所以你说的vm设为null这个操作是不必要的,这里的vm只是this的一个别名,只要应用的其他地方没有对this实例的引用,那么实例就会被回收。所以才会有源码中一系列的解除关系的操作比如:remove(parent.$children, vm),父组件持有子组件的实例引用,这里就是将自己从父组件的children数组中清除,其他操作同理,都是在清除一些引用关系,比如vnode、watcher、event listener。。。这些才是真正的清除,vm = null这个无关痛痒,vm不过是函数内部的一个变量,只要函数执行完这个变量的引用关系就会解除了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题