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