У меня вопрос по JavaScript.Позвольте мне процитировать цитату из книги «Обучение jQuery», стр. 389-390.Вопрос касается Closures.
Я не понимаю, почему «второй вызов externalFn () не сбрасывает значение externalVar, а скорее создает новый экземпляр externalVar, связанный собласть действия второго вызова функции.
Что такое в JavaScript, что могло бы сделать это так? Что мне нужно знать о JavaScript, чтобы я мог сделать это для себя?
Остальныеписьмо - это цитата из книги.
function outerFn() {
var outerVar = 0;
function innerFn() {
outerVar++;
$('#example-7').print('outerVar = ' + outerVar);
}
return innerFn;
}
var fnRef = outerFn();
fnRef();
fnRef();
var fnRef2 = outerFn();
fnRef2();
fnRef2();
Теперь наши вызовы функций имеют более интересное поведение: externalVar = 1 outerVar = 2 outerVar = 1 outerVar = 2 Мы получаем смесь двух предыдущих эффектов.Вызывает innerFn () через каждый ссылочный инкремент externalVar независимо. Обратите внимание, что второй вызов externalFn () не сбрасывает значение externalVar, а скорее создает новый экземпляр outerVar, связанный с областью действия второго вызова функции.это означает, что после вышеуказанных вызовов другой вызов fnRef () выведет значение 3 и последующий вызов fnRef2 () также выведет 3. Два счетчика полностью разделены.