tgoop.com/prog_way_blog/85
Last Update:
Замыкания
Изначально я и хотел обсудить такой концепт, как замыкания, потому что тема очень интересная и востребованная — почти каждое собеседование проходит с вопросом что такое замыкания и это очень важно понимать. Для понимания этой темы в начале лучше вникнуть в области видимости и разобраться что это всё таки такое.
Замыкание с точки зрения теории — это способность функции запомнить своё окружение (ссылки на переменные) в момент вызова. Это такой способ манипуляции областями видимости, который позволяет «замкнуть» переменную внутри тела функции. При помощи такой манипуляции мы можем расширить функционал обычных функций путём создания новых функций с замкнутыми в них переменными. На теории всё вообще не понятно, хотя я правда старался. Рассмотрим пример:
function sayHello(name) {
function wrapped() {
console.log(`Привет, ${name}`)
}
return wrapped
}
// создаем много функций на базе одной
const helloDenis = sayHello("Денис")
const helloKate = sayHello("Катя")
const helloMax = sayHello("Макс")
helloDenis() // Привет, Денис
helloKate() // Привет, Катя
helloMax() // Привет, Макс
Переменная name является замкнутой.
Каким образом мы добиваемся замыкания? В теле функции
sayHello
мы объявляем локальную функцию, которая остается доступной только внутри тела этой самой функции (из-за особенностей областей видимости). Возвращаем эту функцию. А у этой функции есть доступ к переменной name
. Значение переменной при вызове sayHello
замыкается, так как при каждом вызове функции sayHello
внутри нее создается своя локальная переменная name
, никак не зависящая от вызова этой функции снова. На практике должно быть понятнее.На самом деле пример достаточно тривиальный, так что советую посмотреть на код внимательно и ещё раз прочитать его, вникнуть и понять, что самое важное. Если этого не достаточно, то информации об этом концепте в интернете — море. Моё дело лишь подтолкнуть вас в самостоятельному изучению темы.
Тема и правда сложная, надеюсь я смог объяснить её понятно. В скором времени постараюсь выпустить пост с практическими примерами, будет ещё лучше.
#javascript #theory
BY progway — программирование, IT

Share with your friend now:
tgoop.com/prog_way_blog/85