На данный вопрос уже ответили:
Как работают замыкания в JavaScript
6 ответов
Что такое замыкания мне понятно, но в ходе их исследования возникли нюансы:
Есть код:
Не могу осознать благодаря чему переменная numberOfCalls в функции createCounter не обнуляется? Это фишка такая или этому есть разумное объяснение?
Ответ
"Вы вызываете один раз функцию createCounter".
"Замыкание" - создание объекта, содержащего экземпляры всех переменных из внешних областей видимости, используемых функцией.
Вызовите функцию еще раз , а потом начинайте вызывать два результата в произвольном порядке:
$(document).ready(function() {
function createCounter() {
var numberOfCalls = 0;
return function() {
return ++numberOfCalls;
};
}
function appendOutput(aText) {
$("#output").append(aText + "
");
}
$("#btnRun").click(function() {
$("#output").html("");
var fn1 = createCounter();
var fn2 = createCounter();
appendOutput("fn1: " + fn1());
appendOutput("fn1: " + fn1());
appendOutput("fn1: " + fn1());
appendOutput("fn2: " + fn2());
appendOutput("fn2: " + fn2());
appendOutput("fn1: " + fn1());
});
});
Комментариев нет:
Отправить комментарий