Подтвердить что ты не робот

Выделение памяти из локальной переменной в JavaScript

У меня есть функция JS, которая вызывается на странице каждые несколько секунд. Это обновление AJAX.

Являясь функцией, я объявляю локальные переменные. Я не хочу использовать закрытие или глобальные переменные по разным причинам.

Я бы никогда не подумал об этом, но мне нужно освободить/очистить переменные в конце функции, чтобы освободить память или будет ли JS делать это для меня автоматически?

4b9b3361

Ответ 1

Как правило, нет. Переменные, объявленные с помощью var, являются локальными и собираются при сборе мусора. Если вы опускаете var, тогда переменные являются глобальными, а использование ключевого слова delete может быть полезным для глобальных переменных в некоторых случаях, но, как правило, хорошая практика объявлять все переменные с var в любом случае, чтобы не загрязнять window namespace.

delete может быть полезна при использовании наследования на основе прототипа, например:

function myclass() {
    this.variable = 'myvalue'
    ...
    delete this.variable // finished with this variable
}
var inst = new myclass()

Имейте в виду, что если inst удаляется или выходит из области видимости (сборщик мусора), все атрибуты в нем также будут удалены. delete также может быть полезен для удаления элементов из хеш-таблиц:

var d = {}
d['blah'] = 'myvalue'
...
delete d['blah']

Есть некоторые ошибки в сборке мусора, специфичные для браузера. Иногда IE имеет проблемы с очисткой атрибутов в элементах DOM и закрытиях и т.д., Хотя многие из этих проблем были уменьшены в IE8, я считаю.

Ответ 2

Javascript имеет автоматическую сборку мусора. Вам не нужно ничего освобождать.

Ответ 3

Переменные выдаются после того, как они выходят за рамки, в вашем случае локальные переменные, объявленные внутри вашей функции, будут автоматически освобождаться сборщиком мусора js, вам не о чем беспокоиться.