Что такое замыкание в языке программирования?

Замыкание (closure) в программировании — это особый вид функции, которая определена в теле другой функции и создаётся каждый раз во время выполнения последней. Отличительной чертой замыкания является использование ссылок на переменные, отличные от переменных, объявленных в теле функции-замыкания, и ее параметров.

Не следует путать замыкание с механизмом глобальных переменных, использовавшихся в "не объектных" языках, например, С. Замыкание использует не глобальные переменные, а переменные из своего контекста. При перегрузке контекста значения этих переменных также меняются.

В качестве примера широкоизвестного языка, использующего замыкания, можно привести JavaScript. Если в программе, написанной на этом языке, функция определена в теле другой функции, то первая получает доступ к переменным и параметрам последней.

В другом общеизвестном языке, Java, концепция замыкания реализована посредством анонимных классов. Анонимный класс имеет доступ к полям класса, в контексте которого он определён, а также к переменными включающего метода.


Источники:

Замыкание (программирование) — Википедия
Замыкания в JavaScript