В JavaScript переменные хранятся в памяти до тех пор, пока что-либо имеет ссылку на контекст, в котором они были созданы. В случае глобальных переменных, поскольку глобальный контекст имеет ссылку на себя, они всегда хранятся в памяти.
Это означает, что локальные переменные хранятся в памяти, по крайней мере, до тех пор, пока функция, в которой они находятся, возвращается в тот момент, когда они могут быть возвращены , если что-то еще не имеет ссылки на контекст, в котором они были созданы. В этом случае они не могут быть восстановлены, потому что что-то еще может их использовать.
Здесь не приводится пример локальной переменной, которая, безусловно, может быть мелиорированных когда функция заканчивается:
function foo(x) {
var result = x * 2;
return result;
}
А вот пример локальной переменной, которая не может быть утилизирован, когда функция возвращает, пока или, если все, что не назвал это освобождает свою ссылку на возвращаемое значение:
function makeCounter() {
var n = 0;
function count() {
return n++;
}
return count;
}
Пример использования:
var c = makeCounter();
console.log(c()); // 0
console.log(c()); // 1
console.log(c()); // 2
В этом случае, поскольку counter
возвращает ссылку на функцию, а функция (count
) имеет ссылку на контекст, где n
был создан, n
не утилизирован, пока count
существует. count
называется закрытием (он «закрывает» контекст вызова makeCounter
).
Подробнее:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statement/var – epascarello
в общем, вам не нужно беспокоиться о потреблении памяти JS, если не появляются симптомы с низким уровнем осколка, что редко встречается у нас ll-написанный JS. как правило, проблемы с ОЗУ вызваны ошибками кодирования или анти-шаблонами или иногда чрезмерным кэшированием. в JS другие проблемы с бараном гораздо реже, чем программы на C, написанные кем-то из того же уровня опыта. – dandavis