@TostMost

Какова природа утечки памяти JS в задаче?

var theItem = null;
var replaceItem = function () {
    var priorItem = theItem;
    var writeToLog = function () {
        if (priorItem) {
            console.log("hi");
        }
    };
    theItem = {
        longStr: new Array(1000000).join('*'),
        someMethod: function () {
            console.log(someMessage);
        }
    };
};
setInterval(replaceItem, 1000);
  • Вопрос задан
  • 2628 просмотров
Пригласить эксперта
Ответы на вопрос 2
mlnkv
@mlnkv
JavaScript Developer
Каждый раз создается большой объект и ссылка на него сохраняется в определении функции writeToLog , то есть сборщик мусора не может удалить объект, так как на него сохраняется ссылка.

learn.javascript.ru/memory-leaks

Решить можно как то так, но все зависит от ситуации, смотря что вам надо.
var theItem = null;

function writeToLog(item) {
  if (item) {
    console.log("hi");
  }
}

function someMethod() {
  console.log(someMessage);
}

function replaceItem() {
  var priorItem = theItem;

  if (!theItem) theItem = {};
  theItem.longStr = new Array(1000000).join('*');
  theItem.someMethod = someMethod;

  writeToLog(priorItem);
};

setInterval(replaceItem, 1000);
Ответ написан
miraage
@miraage
Старый прогер
Насколько я понимаю, priorItem остается внутри writeToLog и зависает в памяти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект