просто кладет unused в gc-root, а в примере шла речь об утечках через замыкания.
проблема отсутствия утечки кроется в том, что современный браузер выпиливает неиспользуемые переменные из замыканий. то есть если раньше все утекало через функцию someMethod, то теперь чтобы пример завелся, нужно явно указать unused в someMethod
var theThing = null;
var replaceThing = function () {
var originalThing = theThing;
var unused = function () {
if (originalThing) // ссылка на originalThing
console.log("hi");
};
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log("message");
unused; //ссылка на unused
}
};
};
setInterval(replaceThing, 1000);
codesandbox.io/s/kind-colden-7bviy
и я имею в виду именно выкрутасы с функциями, а не реализацию конкретно этой зашитой разметки.
пс: я понимаю, что искусственный пример жестковат для понимания, приношу извинения за бобо глазкам.
просто кладет unused в gc-root, а в примере шла речь об утечках через замыкания.
проблема отсутствия утечки кроется в том, что современный браузер выпиливает неиспользуемые переменные из замыканий. то есть если раньше все утекало через функцию someMethod, то теперь чтобы пример завелся, нужно явно указать unused в someMethod
но тогда unused становится не таким уж unused)