Мне любопытно, как с памятью обрабатываются переменные внутри замыканий. Возьмите этот код, например -Блокировка JavaScript и управление памятью
function iAmAClosure() {
var txtName = document.getElementById('name');
function validation() {
if (txtName.value.length === 0) {
return false;
}
return true;
}
document.getElementById('submit').onclick = function() {
return validation();
}
}
Моя validation
функция вызывается всякий раз, когда пользователь нажимает на кнопку.
Вопрос в том, изменяет ли переменная txtName
в памяти, пока страница активна, или она GC'ed и инициализируется каждый раз, когда вызывается валидация метода? Есть ли что-то еще для этого?
Какова эффективность работы?
Закрытие не имеет значения, если var недоступен, он будет собран. – dandavis
«Производительность» зависит от мощности обработки и размера памяти. Вы не можете сказать, что лучше вообще. Но обратите внимание, что для его инициализации каждый раз вам нужно будет явно перевести код в вашу функцию 'validation' - поведение корректно определено. – Bergi
@ dandavis: Вот почему закрытие имеет значение - оно делает переменную достижимой :) – Bergi