JavaScript

Зачем нужны замыкание в JavaScript? И что это такое?

Правильно я понял эти замыкания?
function a(){
var count=0; //окружения для функции b
function b(){
count=count+1 //использовали свободную переменную
return count; //замыкание
}
}
Замыкание-это просто использование свободной переменной (из окружения) во вложенной функции?
Что то мне подсказывает, что рассуждаю я как то не так
Чтобы сохранить локальную переменную после завершения функции и использовать при запуске 2-ого, 3-его, n-ого раза.
Александр Кудисов
Александр Кудисов
1 867
Лучший ответ
Владимир Василина немного не понял, т. е. это нужно чтобы просто использовать переменную, путём вызова функции, при этом чтобы к ней нельзя было обратиться, а только вызывать?
Замыкание - это одна из основ JavaScript. Другие - это прототипы, функции первого класса, интроспекция, ещё слабая динамическая типизация.

Если совсем простым языком, то замыкание - это функция, в которой есть доступ к переменным из вне функции, при этом они явно (через параметры) в функцию не передаются.
Здесь написали много умных слов, но никто не обратил внимание на то, что твой пример НЕ ВЕРЕН. тебе нужно ВЕРНУТЬ внутреннюю функцию b, а не вызывать её внутри функции a, в противном случае замыкание не будет создано.
---------------------------------------------------------------------------------------------------------------------------
function a(){
var count=0; //окружения для функции b
function b(){
count=count+1; //использовали свободную переменную
return count; //замыкание
}
return b;
}

var counter = a();

counter(); // 1
counter(); // 2
counter(); // 3
counter(); // 4
counter(); // 5

p.s. почитай https://stackoverflow.com/questions/111102/how-do-javascript-closures-work
в корне не так рассуждаешь. ибо ничего реального ты не пишешь и целей в обучении нет. поэтому не обижайся, но тебе вообще ничего не нужно на самом деле, до тех пор, пока не поймешь что нужно и не будешь именно им заниматься.
у меня все наоборот. часто использую какую-то фичу и только потом узнаю, как она называется.
давным-давно я умел делать вот так:
window.onload = function () {
...
button.onclick = function() {
...
};
};
и только потом узнал, что внутренняя функция, та, которая обрабатывает onclick, это и есть замыкание. зачем нужно? а как иначе? объявить ту же функцию вне onload? это не то - в этом случае кода больше, а мне допустим быстро надо набросать кнопок
я понимаю, что я сейчас странные вещи говорю. 99% обучающихся тоже, как и ты, слабо понимают чего хотят, и не видят в этом проблемы, потому что просто не знают как работает мозг.
а я вот в свое время попробовал иначе, и поверь, результат того стоит
Владимир Василина Я скинул бессмысленный код, который подходит под мой вопрос
Тут для каких это целей и т. п, думаю никого не интересует (я и не начал рассусоливать)

P.s. Хоть я немного и недопонял о замыканиях, твой ответ какой то мутноватый