Освобождение памяти из локальной переменной в JavaScript - PullRequest
29 голосов
/ 21 апреля 2010

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

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

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

Ответы [ 3 ]

30 голосов
/ 21 апреля 2010

Как правило, нет. Переменные, объявленные с 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, я считаю.

6 голосов
/ 21 апреля 2010

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

1 голос
/ 21 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...