可能题目表达的不是很清除,但是我也不知道怎么去描述了,欢迎修改。
目前使用 jQuery Mobile
+ Phonegap
写手机端程序。
程序采取 jQuery Mobile
默认页面跳转方式,我把每个子页面独有的 js
放在 data-role="page"
的最后,这样会产生一个问题,虽然随时可以通过 $().remove()
去掉已加载的页面 DOM,但如何去掉已经不需要的子页面 js
运行结果呢?
比如某子页面的 $().on()
已不再需要,何况 $()
对应的 DOM 都被移除了。
写到这里我突然发觉,是不是对应 DOM 被移除,其绑定的事件处理器也就被移除了,即对应 js
运行的结果已经被移除了? js
运行的结果出了事件处理器还有啥?
巴扎黑2017-04-10 15:01:10
JavaScript 的垃圾回收(GC)是自动运行的,只要有一个变量无法被引用到,就有可能(具体取决于 GC 的算法)在下次回收时释放掉对应的内存。如果一个 DOM 被移除了,且没有变量引用它(或者引用它的变量已无法被引用到),那么就有可能在下次回收时被释放掉。
一般只要不做出类似于「把所有已删除的 DOM 保存在一个全局变量里」这样的事情,通常情况下是不必关心 GC 的。局部变量不必手动赋值为 null, 如果没有闭包引用到局部变量的话,超出作用域(函数)就不会有变量再引用到它了。