То есть основная фишка замыкания в том, что оно сохраняет значение предыдущих вызовов функции? Иными словами переменные лексического окружения (scope) сохраняются и соответственно эти сохранённые значения в переменных используются при следующих вызовах функции ?
Да, всё верно. Основное применение замыкания это сохранение доступа к переменным из внешней функции, даже после того, как она завершила свою работу. Это позволяет функции использовать и изменять значения этих переменных, что делает их очень гибкими. В рабочих примерах замыкания могут быть полезными, когда нужно сохранить состояние или создать приватные переменные в JavaScript.
Юрий спасибо за попытку объяснить тему замыкания в js . На мой взгляд не очень удачная. 2-е в вашем видео примерно с 20-21минуты вы рассказываете тему(в другом видео, другой блогер назвал её function factory) и там он сказал,что передовать два аргумента в фунцию почему-то не очень хорошо. Для краткости закончилось все прередачей двух аргументов в отдельных круглых скобках (как у вас) . Не могли бы вы рассказать тему function factory и ещё тему геттеров и сеттеров и нормально объяснить для чего они нужны.
Вы ссылаетесь к тому, что понятие function factory чем-то похоже на каррирование. В каррировании мы стараемся уйти от нескольких аргументов в пользу одного, а в function factory мы больше концентрируемся на расширении функционала или конфигураций готовой функции. В видео есть пример с функцией someFunction5()() , его можно отнести к обоим этим понятиям. Тем не менее, обе эти концепции работают на замыкании, и придуманы для демонстрации и объяснений начинающим в JavaScript.
Юра, Вы 35 минут силились объяснить, что такое замыкание, но похоже Вы и сами не до конца разобрались в этой теме. Замыкание это всего лишь вот это: { var1; get_var1{ return var1; } set_var1{ var1 = 5; } } Внешние фигурные скобки, внутри которых объявлены две подпрограммы, являются обозначением контекста, внутри которого есть данные и эти две подпрограммы. В роли контекста может быть внешняя подпрограмма или какой-то блок операторов. Замыкание - это когда доступ к переменной var1 извне блока кода, в котором она объявлена, отсутствует, т.е. нельзя воспользоваться так: имя-блока-кода.var1 = 4; Но подпрограммы, которые внутри этого блока были объявлены, имеют к ней доступ в силу того, что при замыкании подпрограммы имеют доступ к среде, в которой они были объявлены. Т.е. можно написать: set_var1(); w = gen_var1(); То, что эти две функции имеют доступ к переменной var1 - это и есть замыкание, т.е. доступ функции к переменной той среды, в котором эта функция была определена. При этом, если потом написать так set_var1(); var1 = 10; w = gen_var1(); то w все равно будет содержать 5, потому что функции работают с var1 из среды, в которой они были определены, а не с той переменной var1, которую мы ввели потом.
вы действительно хорошо пояснили понятие замыкания, с учётом примера с псевдокодом. Ваш пример строится на геттере и сеттере, что вполне имеет место быть и может применяться. Тем не менее замыкание не заканчивается только на get-set, есть много разных способов демонстраций. Основная задача видео показать пример постепенного уложения функции с учётом замыкания для тех кто впервые сталкивается с этим инструментом. Спасибо за ваш комментарий!
Это же видео для уже работающих програмистов знающий это язык. Я пробовал изучать пайтон, со второго просмотра чуть-чуть понял. Человек с 0 знаниями не понимает даже что это за программа. Это урок не для новичков!
Здравствуйте! Тема замыканий важна для понимания, когда базовые темы уже разобраны. Также эта тема часто встречается на собеседованиях, и нашей задачей было помочь с подробным разбором. Расскажите, какие темы вам было бы интересно увидеть в будущем на нашем канале? Вы уже начали знакомство с синтаксисом JS?
Юр спасибо огромное! Два дня смотрел/читал всякое и не мог допереть что такое замыкание и где оно применяется, теперь картинка сложилась
Непростая тема, но очень понравилось объяснение в видео! Всё четко и понятно! Спасибо!
хороший урок, спасибо автору!
Автор очень доходчиво рассказывает! Рекомендую
Спасибо, поняла с первого раза 👌
Объективно адекватно
Отличный урок! Давно слышал про замыкания, но никак не мог понять, после видео стало ясно) Подскажите где можно попрактиковаться на замыкания?
То есть основная фишка замыкания в том, что оно сохраняет значение предыдущих вызовов функции? Иными словами переменные лексического окружения (scope) сохраняются и соответственно эти сохранённые значения в переменных используются при следующих вызовах функции ?
Да, всё верно. Основное применение замыкания это сохранение доступа к переменным из внешней функции, даже после того, как она завершила свою работу.
Это позволяет функции использовать и изменять значения этих переменных, что делает их очень гибкими.
В рабочих примерах замыкания могут быть полезными, когда нужно сохранить состояние или создать приватные переменные в JavaScript.
Отличный пример👌
Спасибо!
Огонь!
Юра 🔥🔥🔥
Юрий спасибо за попытку объяснить тему замыкания в js . На мой взгляд не очень удачная. 2-е в вашем видео примерно с 20-21минуты вы рассказываете тему(в другом видео, другой блогер назвал её function factory) и там он сказал,что передовать два аргумента в фунцию почему-то не очень хорошо. Для краткости закончилось все прередачей двух аргументов в отдельных круглых скобках (как у вас) . Не могли бы вы рассказать тему function factory и ещё тему геттеров и сеттеров и нормально объяснить для чего они нужны.
Вы ссылаетесь к тому, что понятие function factory чем-то похоже на каррирование. В каррировании мы стараемся уйти от нескольких аргументов в пользу одного, а в function factory мы больше концентрируемся на расширении функционала или конфигураций готовой функции. В видео есть пример с функцией someFunction5()() , его можно отнести к обоим этим понятиям. Тем не менее, обе эти концепции работают на замыкании, и придуманы для демонстрации и объяснений начинающим в JavaScript.
ТОП!!
Юра, Вы 35 минут силились объяснить, что такое замыкание, но похоже Вы и сами не до конца разобрались в этой теме.
Замыкание это всего лишь вот это:
{
var1;
get_var1{
return var1;
}
set_var1{
var1 = 5;
}
}
Внешние фигурные скобки, внутри которых объявлены две подпрограммы, являются обозначением контекста,
внутри которого есть данные и эти две подпрограммы. В роли контекста может быть внешняя подпрограмма или
какой-то блок операторов.
Замыкание - это когда доступ к переменной var1 извне блока кода, в котором она объявлена, отсутствует,
т.е. нельзя воспользоваться так:
имя-блока-кода.var1 = 4;
Но подпрограммы, которые внутри этого блока были объявлены, имеют к ней доступ в силу того, что при
замыкании подпрограммы имеют доступ к среде, в которой они были объявлены. Т.е. можно написать:
set_var1();
w = gen_var1();
То, что эти две функции имеют доступ к переменной var1 - это и есть замыкание, т.е. доступ функции к переменной той среды, в котором эта функция была определена.
При этом, если потом написать так
set_var1();
var1 = 10;
w = gen_var1();
то w все равно будет содержать 5, потому что функции работают с var1 из среды, в которой они были определены, а не с той переменной var1, которую мы ввели потом.
вы действительно хорошо пояснили понятие замыкания, с учётом примера с псевдокодом. Ваш пример строится на геттере и сеттере, что вполне имеет место быть и может применяться. Тем не менее замыкание не заканчивается только на get-set, есть много разных способов демонстраций. Основная задача видео показать пример постепенного уложения функции с учётом замыкания для тех кто впервые сталкивается с этим инструментом. Спасибо за ваш комментарий!
👍@@ElbrusBootcamp
❤❤❤
Это же видео для уже работающих програмистов знающий это язык. Я пробовал изучать пайтон, со второго просмотра чуть-чуть понял. Человек с 0 знаниями не понимает даже что это за программа. Это урок не для новичков!
Здравствуйте! Тема замыканий важна для понимания, когда базовые темы уже разобраны. Также эта тема часто встречается на собеседованиях, и нашей задачей было помочь с подробным разбором. Расскажите, какие темы вам было бы интересно увидеть в будущем на нашем канале? Вы уже начали знакомство с синтаксисом JS?