Я немного добавил наглядности
function one() {
const oneVar = 'Hello!'
let counter = 0;
console.log('функция one работает прямо сейчас, в счетчике', counter)
function two() {
console.log(oneVar, ++counter)
}
console.log('функция one почти завершилась, в счетчике все еще ', counter);
return two
}
const three = one();
console.log('функция one точно завершилась, даже return сработал');
console.log('в переменной three сейчас функция two()');
console.log(three);
three();
three();
three();
console.log('обожемой, мы видим как менялась переменная в уже завершенной функции. чераная магия? нет - это называется замыкание!');
выхлоп:
"функция one работает прямо сейчас, в счетчике", 0
"функция one почти завершилась, в счетчике все еще ", 0
"функция one точно завершилась, даже return сработал"
"в переменной three сейчас функция two()"
function two() {
console.log(oneVar, ++counter)
}
"Hello!", 1
"Hello!", 2
"Hello!", 3
"обожемой, мы видим как менялась переменная в уже завершенной функции. чераная магия? нет - это называется замыкание!"