Object.observe/unobserve如何与垃圾收集进行交互?

ale*_*exp 6 javascript garbage-collection ecmascript-harmony object.observe

在对象上有一个活动的Object.observe是否会阻止它被垃圾回收?您是否需要先调用Object.unobserve以允许它被垃圾回收?或者GCing一个对象是否删除了所有活动的观察者?

And*_*erg 6

观察对象并不能使它保持活力.一旦对象死亡,其观察者将不再接收任何事件.至少在V8的实现中是这样,这是迄今为止唯一的实现.如果这个功能有一天成为标准,那么假设它也适用于其他实现可能是安全的.

但是,观察使其活动观察者保持活跃状态,以及与每个观察者函数关联的一些内部堆分配数据结构.实际上,这些额外的数据只会在函数本身也已经死亡时死亡,即使它已经很久没有观察到任何事情.

  • @alexp,这不应该是必要的.在上述意义上,仅观察死对象的函数不再"活跃".事实上,尝试手动管理生命时间很容易出错,以至于它所引入的额外簿记数据很有可能使这些内容保持活力_longer_. (2认同)