Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您应该处理jQuery对象吗?_Javascript_Jquery_Memory Management - Fatal编程技术网

Javascript 您应该处理jQuery对象吗?

Javascript 您应该处理jQuery对象吗?,javascript,jquery,memory-management,Javascript,Jquery,Memory Management,我的一位同事总是将jQuery变量设置为null,以便在完成后有效地处理它们,例如: var bigThing = $(body); // ... // Do some stuff // ... bigThing = null; 这真的有必要吗?如果您将代码封装到函数中,而在函数完成后,如果没有在其他地方使用局部变量的引用,则局部变量将被终止 如果您需要一次又一次地选择同一事物,而不是只选择一次并保留该变量,那么保持选择器/变量(缓存)可能会产生一些积极的影响。虽然并非完全必要,但这可以确保G

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

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对象(即事件处理程序)的引用反之亦然。这会在两个独立的系统之间创建一个循环引用;这是大多数垃圾收集器都会遇到的问题


为了进一步阅读,我向您指出。

可能重复的感谢,是的,这个问题确实非常相似,并且有一个很好的答案。我认为“为对象消元”是一个用词不当的词。您肯定会为变量消元;对象只是被解引用了。