由全局范围内的 Web 应用程序声明的全局变量
globals declared by a web application in global scope
有没有办法找出Web应用程序在全局范围(窗口)中声明/注入的所有变量?我想从正文卸载的窗口中删除所有这些声明的内容,以便在选项卡关闭时释放它占用的内存。
这样做的理由:Firefox 为所有选项卡维护全局堆。因此,关闭选项卡不会占用内存。
这样做的理由: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`
}
}
另请查看此线程以了解许多不同的方法:检测和报告用户定义的全局变量
值得一提的一个值得注意的技巧是创建一个 iframe,并将 iframe 的窗口对象属性与当前窗口对象属性进行比较。这种方法的优点是您可以随时使用它,即使在应用程序启动后,您甚至可以定期运行它。
相关文章:
- 如何将变量声明为全局变量
- 如何将变量声明为全局变量?用case foreach?Javascript
- 返回语句后的函数声明全局变量不会被覆盖
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- JavaScript 全局变量声明
- 如何从选择菜单选项动态声明全局变量
- 让 javascript 将(默认情况下)未声明的变量声明到当前本地范围(基于首次使用)而不是全局范围
- 声明全局变量
- 由全局范围内的 Web 应用程序声明的全局变量
- 是否有任何选项可以在煎茶触摸中声明全局变量
- 如何将值从一个函数传递到另一个具有对象的函数,而无需在 JS 中声明全局变量
- 如何在不声明全局变量的情况下将值从一个函数传递到另一个函数?
- 如何从函数内部声明全局变量
- 在页面初始化时声明全局变量
- 如何在javascript中正确声明全局变量
- 是否可以在Node/Express 4.0中声明全局变量?
- Javascript:在一个脚本中声明全局变量,并在另一个脚本中使用它
- 如何使用JS声明全局变量
- 在 .js 文件中声明全局变量是否不好
- 如何在外部js文件中声明全局变量?