Что такое замыкание JavaScript?

Что такое замыкание в контексте языка JavaScript?

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

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

Следовательно, замыкания можно использовать везде, где вы обычно использовали объект с одним единственным методом. Однако замыкания могут приводить к утечкам памяти, так что повсеместно активно использовать их не рекоммендуется." - с просторов интернета...