Страницы

Поиск по вопросам

среда, 6 марта 2019 г.

Как работают замыкания (нюансы)? [дубликат]

На данный вопрос уже ответили: Как работают замыкания в 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()); }); });

output

Комментариев нет:

Отправить комментарий