2012-05-29 72 views
0

有什么方法可以找到全局范围(窗口)中的Web应用程序声明/注入的所有变量?我想从正文卸载窗口中删除所有声明的事物,以便在关闭标签页时释放它所占用的内存。全球范围内的Web应用程序声明的全局变量

原因:Firefox为所有选项卡保留全局堆。因此,关闭标签不会声称记忆。

回答

2

原因:Firefox维护所有选项卡的全局堆。因此,关闭标签不会声称记忆。

你能提供一个引用吗?我确信Firefox在某些时候会释放相关的内存。否则它会很快变成不可用的记忆猪。

回答你居然问了一个问题:您可以在window建立属性名称的列表中加载应用程序之前:

var name; 
var names = []; 

for (name in window) { 
    names.push(name); 
} 

...然后删除任何不在该列表在上结束:

for (name in window) { 
    if (names.indexOf(name) === -1) { 
     window[name] = undefined; // See below for why not `delete` 
    } 
} 

注意,在大多数情况下,你就无法真正消除财产(例如,delete window.foo;大多将无法正常工作),因为A)如有关财产是通过var创建,您可以不删除它,B)最多IE的版本不会让你delete任何window的财产。但是你可以给他们分配undefined

var name; 
var names = {}; 

for (name in window) { 
    names[name] = 1; 
} 

然后检查变为:

for (name in window) { 
    if (!names.hasOwnProperty(name)) { 
     window[name] = undefined; // See above for why not `delete` 
    } 
} 
0

还检查了这个线程

或者说不是一个数组,如果你使用一个对象可能更容易稍后检查属性名称对于多种不同的方法: Detecting and reporting user defined global variables

值得一提的一个值得一提的值得一提的是创建一个iframe并比较iframe的窗口obj ect属性与您当前的窗口对象属性。这种方法的优点是,即使在应用程序启动后,您也可以随时使用它,甚至可以定期运行它。