gpt4 book ai didi

javascript - Web 应用程序在全局范围内声明的全局变量

转载 作者:行者123 更新时间:2023-12-02 19:37:22 25 4
gpt4 key购买 nike

有没有办法找出全局范围(窗口)中 Web 应用程序声明/注入(inject)的所有变量?我想在主体卸载时从窗口中删除所有声明的内容,以便当选项卡关闭时,它会释放它占用的内存。

这样做的原因:Firefox 维护所有选项卡的全局堆。因此关闭选项卡不会占用内存。

最佳答案

Reason to do it: Firefox maintains global heap for all the tabs. Thus closing tab doesn't claim memory.

你能提供一个引用吗?我确信 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`
}
}

关于javascript - Web 应用程序在全局范围内声明的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com