Javascript 存储在局部变量中的jQuery对象是否会导致分离的dom节点
据我所知,任何分配给局部变量的内存都会在函数结束时释放。只有在该局部范围内创建的闭包中引用了该变量,并且在闭包中没有正确地为null时,才会发生内存释放(以及发生分离的DOM节点或内存泄漏) 例如,下面的变量originalThing(源-): 最近有人告诉我,用jQuery对象捕获一个元素并将该引用存储在局部变量中将导致在删除该元素后分离DOM节点,即使捕获jQuery对象的函数的作用域已结束 i、 e 这对我来说似乎不正确,我认为所有局部变量都是在其作用域的末尾释放的,除非有一些持久引用,因此被删除的DOM节点不应该有任何东西将其保留在内存中,它将被垃圾收集Javascript 存储在局部变量中的jQuery对象是否会导致分离的dom节点,javascript,jquery,memory-leaks,Javascript,Jquery,Memory Leaks,据我所知,任何分配给局部变量的内存都会在函数结束时释放。只有在该局部范围内创建的闭包中引用了该变量,并且在闭包中没有正确地为null时,才会发生内存释放(以及发生分离的DOM节点或内存泄漏) 例如,下面的变量originalThing(源-): 最近有人告诉我,用jQuery对象捕获一个元素并将该引用存储在局部变量中将导致在删除该元素后分离DOM节点,即使捕获jQuery对象的函数的作用域已结束 i、 e 这对我来说似乎不正确,我认为所有局部变量都是在其作用域的末尾释放的,除非有一些持久引用,因
我希望有人能对这一主题有所了解,最好是源代码。分离是全局性的,因此永远不会消失。
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;
}