Какие у вас доказательства утечки памяти? Большинство из них были исправлены в IE, это определенно не было горячей темой в течение нескольких лет. В IE 6 и более ранних версиях IE 7 были проблемы с циклическими ссылками, связанными с объектами DOM, но они были в значительной степени исправлены даже в этих старых версиях.
Во всяком случае, в следующем:
> Ext.History = (function () {/* code goes here. */ })();
непосредственно вызванное выражение функции (IIFE) справа имеет только замыкание во внешнюю область (которая выглядит как глобальный код). Вы не показываете, где есть какие-то проблемные закрытия, поэтому очень сложно комментировать.
Предположительно, 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;
}
};
Обратите внимание, что это значение add должно быть History (например, назвать его Ext.History.add()
), иначе оно не будет работать. Кроме того, переменные с именами, совпадающими с текущими свойствами, должны иметь новые имена.
Если вы публикуете весь код (или разумный фрагмент, который показывает шаблон), исправление может быть возможным. Или посмотрите новые версии и посмотрите, что они сделали, чтобы это исправить.