Javascript 您应该处理jQuery对象吗?
我的一位同事总是将jQuery变量设置为null,以便在完成后有效地处理它们,例如:Javascript 您应该处理jQuery对象吗?,javascript,jquery,memory-management,Javascript,Jquery,Memory Management,我的一位同事总是将jQuery变量设置为null,以便在完成后有效地处理它们,例如: var bigThing = $(body); // ... // Do some stuff // ... bigThing = null; 这真的有必要吗?如果您将代码封装到函数中,而在函数完成后,如果没有在其他地方使用局部变量的引用,则局部变量将被终止 如果您需要一次又一次地选择同一事物,而不是只选择一次并保留该变量,那么保持选择器/变量(缓存)可能会产生一些积极的影响。虽然并非完全必要,但这可以确保G
var bigThing = $(body);
// ...
// Do some stuff
// ...
bigThing = null;
这真的有必要吗?如果您将代码封装到函数中,而在函数完成后,如果没有在其他地方使用局部变量的引用,则局部变量将被终止
如果您需要一次又一次地选择同一事物,而不是只选择一次并保留该变量,那么保持选择器/变量(缓存)可能会产生一些积极的影响。虽然并非完全必要,但这可以确保GC在下次运行时清除它(对于您甚至没有1个引用的所有分配,它都会这样做)
但是,在您的示例中,如果将
bigThing
设置为任何其他值(不一定为null),则$(body)对象(jquery扩展对象,而不是DOM body对象)将被清除删除引用并释放内存不是必要的,但这是一个好习惯Javascript有自己的垃圾收集器。因此,您似乎不需要显式地处理对象
但由于各种原因,如垃圾收集器的实现不好等,可能会发生一些内存泄漏
通过显式地将它们置零,可以向浏览器指定必须在下一次垃圾收集中清除此内存
总之,尽管没有必要这样做,但是取消JQuery/javascript对象将是一个很好的实践
简短回答:不,如果您使用jQuery,这几乎没有必要
这取决于您对它所做的操作。如果您没有将任何事件处理程序附加到DOM节点,垃圾收集器将在不再引用它时清除它
但是,即使您确实附加了事件处理程序,jQuery也会在函数中处理它们,比如和,为您分离所有事件处理程序。因此,只要您使用jQuery与DOM交互,您就安全了
如果没有jQuery,如果您已将事件处理程序附加到节点,则即使您已从DOM树中删除该节点并且不再有任何对该节点的引用,GC也不会清除它。这是因为DOM节点包含对JavaScript对象(即事件处理程序)的引用反之亦然。这会在两个独立的系统之间创建一个循环引用;这是大多数垃圾收集器都会遇到的问题
为了进一步阅读,我向您指出。可能重复的感谢,是的,这个问题确实非常相似,并且有一个很好的答案。我认为“为对象消元”是一个用词不当的词。您肯定会为变量消元;对象只是被解引用了。