В JavaScript функции могут быть описаны не только одна за другой, но и одна внутри другой. Когда у вас одна функция находится внутри другой, то внутренняя функция имеет доступ к переменным внешней функции.
function внешняя(x) {
var tmp = 3;
function внутренняя(y) {
alert(x + y + (++tmp)); // выведет 16
}
внутренняя(10);
}
внешняя(2);
Этот код всегда выдаёт 16, потому что внутренняя функция видит x, который является переменной во внешней функции. В данном случае аргументом функции. Так же внутренняя() может видеть tmp из внешней().
Это и называется замыкание или closure. Если точнее, замыканием называется именно внешняя функция, а всё что внутри неё называется closure environment или среда замыкания.
В JavaScript функции могут быть описаны не только одна за другой, но и одна внутри другой. Когда у вас одна функция находится внутри другой, то внутренняя функция имеет доступ к переменным внешней функции.
function внешняя(x) {
var tmp = 3;
function внутренняя(y) {
alert(x + y + (++tmp)); // выведет 16
}
внутренняя(10);
}
внешняя(2);
Этот код всегда выдаёт 16, потому что внутренняя функция видит x, который является переменной во внешней функции. В данном случае аргументом функции. Так же внутренняя() может видеть tmp из внешней().
Это и называется замыкание или closure. Если точнее, замыканием называется именно внешняя функция, а всё что внутри неё называется closure environment или среда замыкания.