Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замыкания в Javascript (https://javascript.ru/forum/misc/81782-zamykaniya-v-javascript.html)

Белый шум 01.02.2021 04:27

Цитата:

Сообщение от denis_alekss
Зачем нужно создавать ссылку counter на функцию getMyClosure?

Это не ссылка на функцию getMyClosure. Это выполнение функции getMyClosure и сохранение результата её выполнения в переменную counter. В данном случае функция getMyClosure возвращает ссылку на свою внутреннюю функцию (closure), и в переменную counter попадёт именно она - closure.

Цитата:

Сообщение от denis_alekss
Почему нельзя просто вызвать getMyClosure() и передать в Onclick?

Что передать в onclick? Вызов функции getMyClosure? Так она же возвращает не число, а ссылку на функцию closure... Причём при каждом вызове она будет возвращать новое замыкание, со своим собственным окружением:
<body>
<script>
function getMyClosure(){
   var count = 0;
   var closure = function(){ return count++; }
   return closure;
}
 
var counter1 = getMyClosure(); //первое замыкание
var counter2 = getMyClosure(); //второе
var counter3 = getMyClosure(); //третье
</script>
<button onclick="document.getElementById('btn1').innerText=counter1()">Button1 (<span id="btn1">-</span>)</button>
<button onclick="document.getElementById('btn2').innerText=counter2()">Button2 (<span id="btn2">-</span>)</button>
<button onclick="document.getElementById('btn3').innerText=counter3()">Button3 (<span id="btn3">-</span>)</button>
</body>


P.S.: Если ещё не читали: https://learn.javascript.ru/closure


Часовой пояс GMT +3, время: 17:59.