Показать сообщение отдельно
  #21 (permalink)  
Старый 01.02.2021, 04:27
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Сообщение от 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

Последний раз редактировалось Белый шум, 01.02.2021 в 07:36.
Ответить с цитированием