Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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对象是否会导致分离的dom节点_Javascript_Jquery_Memory Leaks - Fatal编程技术网

Javascript 存储在局部变量中的jQuery对象是否会导致分离的dom节点

Javascript 存储在局部变量中的jQuery对象是否会导致分离的dom节点,javascript,jquery,memory-leaks,Javascript,Jquery,Memory Leaks,据我所知,任何分配给局部变量的内存都会在函数结束时释放。只有在该局部范围内创建的闭包中引用了该变量,并且在闭包中没有正确地为null时,才会发生内存释放(以及发生分离的DOM节点或内存泄漏) 例如,下面的变量originalThing(源-): 最近有人告诉我,用jQuery对象捕获一个元素并将该引用存储在局部变量中将导致在删除该元素后分离DOM节点,即使捕获jQuery对象的函数的作用域已结束 i、 e 这对我来说似乎不正确,我认为所有局部变量都是在其作用域的末尾释放的,除非有一些持久引用,因

据我所知,任何分配给局部变量的内存都会在函数结束时释放。只有在该局部范围内创建的闭包中引用了该变量,并且在闭包中没有正确地为null时,才会发生内存释放(以及发生分离的DOM节点或内存泄漏)

例如,下面的变量originalThing(源-):

最近有人告诉我,用jQuery对象捕获一个元素并将该引用存储在局部变量中将导致在删除该元素后分离DOM节点,即使捕获jQuery对象的函数的作用域已结束

i、 e

这对我来说似乎不正确,我认为所有局部变量都是在其作用域的末尾释放的,除非有一些持久引用,因此被删除的DOM节点不应该有任何东西将其保留在内存中,它将被垃圾收集


我希望有人能对这一主题有所了解,最好是源代码。

分离是全局性的,因此永远不会消失。
detached
变量的问题是。如果它们超出范围,它们应该像其他任何东西一样进行清理。如果您发现不是这样,您应该提交一张票证。如果您使用jquery选择/筛选方法链选择元素,然后将该链的结果存储在一个不经常清理的变量中,那么您所描述的情况通常会发生。例如,
var foo=$(“#foo”).find(“.bar”).filter(.baz”)
如果删除了任何.bar元素,它们仍将存在,因为变量
foo
包含对它的引用。一旦不再引用
foo
,它将被清除。这通常很容易通过不使用链接来获得您的选择来解决。旧的,但仍然相关:和
var theThing = null;
var replaceThing = function () {
  var originalThing = theThing;
  var unused = function () {
    if (originalThing)
      console.log("hi");
  };
  theThing = {
    longStr: new Array(1000000).join('*'),
    someMethod: function () {
      console.log(someMessage);
    }
  };
};
setInterval(replaceThing, 1000);
function myFunc() {
    var $div = $( 'div' );

    return;
}