你应该处理jQuery对象吗?

时间:2012-01-05 09:03:39

标签: javascript jquery memory-management

我的一位同事总是将他们的jQuery变量设置为null,以便在他们完成后有效地处理它们,例如:

var bigThing = $(body);
// ...
// Do some stuff
// ...
bigThing = null;

这真的有必要吗?

5 个答案:

答案 0 :(得分:7)

如果您将代码封装到函数完成后不必要的函数中,那么当在其他地方没有使用它们时,局部变量将被终止。

如果你需要一遍又一遍地选择相同的东西而不是只选择一次并保留变量,那么保持选择器/变量(缓存)可能会产生一些积极的影响。

答案 1 :(得分:2)

删除引用并释放内存不是必要但是好习惯

答案 2 :(得分:2)

  

简短的回答:如果你使用的是jQuery,那几乎没有必要。

这取决于你用它做了什么。如果您没有将任何事件处理程序附加到DOM节点,则垃圾收集器将在不再引用它时将其清除。

但即使您确实附加了事件处理程序,jQuery也会通过为您分离所有事件处理程序来处理.remove().empty()等函数。所以只要你使用jQuery与DOM交互,你就是安全的。

如果没有jQuery,如果你已经将一个事件处理程序附加到Node,那么即使你从DOM树中删除了Node并且你不再有任何对它的引用,GC也不会清除它。这是因为DOM节点包含对JavaScript对象(即事件处理程序)的引用,反之亦然。这会在两个独立的系统中创建循环引用;大多数垃圾收集者都遇到了麻烦。

如需进一步阅读,请指向Douglas Crockford's article on Memory Leaks

答案 3 :(得分:0)

虽然不是完全必要,但可以这样做以确保GC在下一次运行中清除它(无论如何,对于你甚至没有参考的所有分配都会这样做。)

在您的示例中,如果将bigThing设置为其他任何内容(不一定为null),则将清除$(body)对象(jquery扩展对象,而不是DOM主体对象)

答案 4 :(得分:0)

Javascript有自己的垃圾收集器。因此,您似乎不需要明确处置对象。

但是由于各种原因,比如垃圾收集器的实现不好等,可能会发生一些内存泄漏。

通过显式地使它们无效,您指定浏览器必须在下一个垃圾收集中清除此内存。

总之,虽然没有必要这样做,但是将JQuery / javascript对象取消是一个好习惯。

相关问题