我正在使用旧版extjs来调试我的js代码。我在我的代码中打了这个电话:
Ext.History.add("text");
内部Ext.History实现如下:
Ext.History = (function () {/* code goes here. */ })();
问题是调用Ext.History.add()会导致IE上的内存泄漏。所以假设我可能想停止使用机箱并执行以下操作:
function History () {
/* code */
}
Ext.History = History;
但这会导致错误。
编辑:错误来自历史对象内的add方法。
答案 0 :(得分:1)
您对内存泄漏有什么证据?大多数已在IE中修复,它肯定不是几年来的热门话题。 IE 6和早期IE 7在涉及DOM对象的循环引用方面存在问题,但它们已经相当修复,即使在那些旧版本中也是如此。
无论如何,在下面:
> Ext.History = (function () {/* code goes here. */ })();
右边的立即调用的函数表达式(IIFE)只有一个对外部作用域的闭包(看起来像是glbal代码)。您没有显示任何有问题的闭包的位置,因此很难发表评论。
据推测,IIFE返回一个带有 add 属性的对象,该属性是一个函数,该函数对IIFE中声明的变量有一个闭包,例如:
Ext.History = (function () {
var foo = 'foo';
return {
add: function(bar) {
return foo + ' ' + bar;
}
}
})();
您可以使用对象和直接属性替换整个事物,例如:以下内容与上述内容相同,只是它访问 History 的属性而不是闭包:
Ext.History = {
foo: 'foo',
add: function (bar) {
return this.foo + ' ' + bar;
}
};
请注意,添加的此值必须为历史记录(例如将其称为Ext.History.add()
)否则不会工作。此外,名称与当前属性相同的变量需要赋予新名称。
如果您发布整个代码(或显示模式的合理块),则可能会进行修复。或者,查看新版本,看看他们为修复它做了些什么。