Дружище, спасибо тебе, во всем твоём ролике главные слова для понимания замыкания - это "спрятать переменную". Для меня, это было самым главным объяснением. Люблю когда умеют объяснить простыми словами, а темболее, буквально, парой слов👌👍
Как в том анекдоте. Кому то дано рассказывать анекдоты, а кому то нет. Вот кому то дано объяснять, а кому то нет) СПАСИБО Вам за Ваш труд) Доступно, четко, без лишних слов. ЗАМЕЧАТЕЛЬНО!
Объяснение отличное, только стоит добаваить что присваивание "let d=сs2()" функции переменной необходимо для того чтобы сохранить переменную let c, от уничтожения при каждом новом вызове. Если три раза подряд вызвать cs2(), sc2(), sc2() то получим 1, 1, 1. А так если присвоить код функции переменной то переменная сохранит let c, до следующего вызова.
Отличное дополнение! Для себя сформулирую: созданная переменная - d это по сути объявление функции (той, что внутри cs2) в глобальной области видимости. Функция есть ее код + набор доступных для нее переменных, т.е. доступна переменная - с. JS "видит" эту связь и поэтому, когда заканчивается строка кода №25, функция cs2() - уже отработала и по сути должна быть уничтожена в памяти. Но благодаря связи (кода функции d и ее возможности использования в своем коде внешней по отношению к ней переменной - с) переменная - с не удаляется из памяти. Этот процесс называют замыканием. Функции CS2 уже нет (она отработала), а ее переменная - с сохраняется (благодаря замыканию). И к ней имеется доступ через функцию замыкания - d(). Если накосячил с выводами - Поправьте)
Лучшее объяснение. Я как человек из строгой типизации (C#), очень рад, что посмотрел этот видео. Спасибо за пример о "приватном методе", встало в голову железно.
Круто! Подача матеріалу на висоті. Єдині уроки, де я не засинаю. ДЯКУЮ!!! Навіть собі вже дещо доповнив: ))) function cs2() { let c = 0; return function (flag) { if (flag == '+') c++; if (flag == '-') c--; if (flag == '0') c = 0; return c; } }
Спасибо огромное! Впервые Вас смотрю, и Ваш канал стал первым, который заставил меня подписаться и получать оповещения о новых видео)) Вы объясняете гениально!
Фрагментами понимал, что где и как работает. Только не мог собрать это в одно понимание. Теперь благодаря вам произошло замыкание в голове всех этих пониманий в одно))
Ваши уроки слушать одно удовольствие! Вчера читала в учебникe learn js и поняла, когда смотрела ваше видео, что ничего не поняла из прочитанного) лучше сначала смотреть ваши видео, а я потом читать теорию))
Спасибо большое, теперь действительно понятно. Всегда приятно, когда человек действительно старается объяснить доступно, а не просто как попало, лишь бы просмотров побольше набрать.
Спасибо вам огромное! У вас просто превосходно получается объяснять сложные вещи простыми словами! Это талант! Без вас до меня бы очень долго доходило!
Хороший урок, все понятно. Захотелось использовать анонимные функции и новый синтаксис, сначала получилось такое: function cs2() { let c = 0; return () => console.log(++c); } let d = cs2(); d(); d(); d(); Потом стал рассуждать, а можно ли как то выкинуть cs2(), ведь к ней почти не обращаемся, пыхтел, пыхтел и все таки с подсказкой справился: let d = (function () { let c = 0; return () => console.log(++c); })(); d(); d(); d(); Понимаю, что код плохо читаемый, но в тоже время, вполне понятный, а самое главное минимум команд. С удовольствием изучил бы еще более короткий вариант.
я почемуто создал для себя ассоциацию что замыкание это - замыкание данных между функциями, но тут ..."функцию замыкают на области видимости".. ,четко!.. ВЕЛИКИ ДЗЯКУЙ!.
Спасибо. Сколько уже уже учу JS уже даже работаю друном толька сейчас понял что такое замыкание функции. Спасибо. Замыкание функции в Javascript. Function Closures.
почему ни кто (доходчиво) не упоминает этот момент 10:30. Этож самое важно. Спасибо! благодаря вашему видео, до конца понял что к чему (по крайней мере саму концепцию)!
Спасибо за максимально подробное разъяснение) Но, думаю, можно объяснить ещё короче: "Замыкание - это функция, написанная, как класс с одной функцией" и показать конечную запись. Полагаю, было бы достаточно) По сути, получается просто в d хранится изолированное пространство имён.
Интересный момент, который можно не заметить и, возможно, он улучшит понимание. Для замыкания должна быть передана в переменную уже вызванная функция, т.е. со скобками *let a = func( )* , и после чего, тоже вызвана со скобками *a()* , тем временем как обычная функция при таком синтаксисе бросит ошибку
12:52 - а если какой то редиска сделает d = 6? Переменную с то защитили, но редиска убил d... Если вы объявили переменную через let, разве у редиски не вызовет ошибки повторное объявление переменной через let?
Очень все круто! Спасибо!) Но хотелось бы увидеть еще чуть более сложный пример с объяснениями) что бы понимать где еще и как именно я(очень-очень новичек) могу использовать замыкание)
Добрый день. Позвольте вопрос. Может и тупой, но я только учусь :) Если без замыкания, то в первом случае мы создавали переменную let a = 0, а потом переходили к созданию функции. Это типа плохо, т.к. создаётся "а" - глобальная переменная, все дела, лучше поменьше глобальных переменных, а то её кто-то случайно может переназначить. НО в случае замыкания мы все равно создавали новую переменную d. Это не считается?? Её же тоже может кто-то переназначить... Спасибо.
Извините, я недопонял, в цепочке вложенных функций переменная доступна всем или только между родительской и дочерней? Если объявить функцию A, создать в ней переменную aA, и функцию B, которая в свою очередь возвращает функцию C, будет ли в функции C доступна переменная aA, объявленная в "корневой" функции? Иными словами, для функции C область видимости расширяется до B или до A?
но теперь осталась проблема с переменной "d" - которая теперь глобальная и её тоже можно изменить/перезаписать. Не понимаю логики зачем делать "приватной" одну глобальную переменную, при этом создавая другую
Здравствуйте, спасибо за урок, объясните пожалуйста, почему каждый раз при вызове функции d, которой присвоена функция cs2 нет переинициализации переменной c? Ведь первой строчкой в функции cs2 идет объявление переменной c = 0, почему в таком случае при каждом вызове функции она инкрементируется, а не начинается с нуля?)
Можно вопрос - зачем? Ведь точно так же как объявляется глобальная переменная в случае без замыкания, мы объявляем другую глобальную переменную которой присваиваем функцию. Получается только больше кода с одним результатом - имеется глобальная переменная, которую в обоих случаях можно переопределить.
Хочу сказать, что это самое лучшее объяснение замыкания которое я когда либо видео, огромное спасибо!
+!!
Ты уже стал фронт енд разрабом?
Два дня штудировал литературу/видео по этой теме, везде одна каша. Тут за 15 минут все настолько доступно и понятно. Браво!
Дружище, спасибо тебе, во всем твоём ролике главные слова для понимания замыкания - это "спрятать переменную". Для меня, это было самым главным объяснением. Люблю когда умеют объяснить простыми словами, а темболее, буквально, парой слов👌👍
Как в том анекдоте. Кому то дано рассказывать анекдоты, а кому то нет. Вот кому то дано объяснять, а кому то нет) СПАСИБО Вам за Ваш труд) Доступно, четко, без лишних слов. ЗАМЕЧАТЕЛЬНО!
Боже я в тебя влюбился ты легенда ты очень охуительно обьяснил
Действительно, Алексей, это финт ушами, говоря твоим языком. Наконец-то я набрел на понятное объяснение замыкания!!!
видимо.. Александр ..)
Объяснение отличное, только стоит добаваить что присваивание "let d=сs2()" функции переменной необходимо для того чтобы сохранить переменную let c, от уничтожения при каждом новом вызове. Если три раза подряд вызвать cs2(), sc2(), sc2() то получим 1, 1, 1. А так если присвоить код функции переменной то переменная сохранит let c, до следующего вызова.
Отличное дополнение! Для себя сформулирую: созданная переменная - d это по сути объявление функции (той, что внутри cs2) в глобальной области видимости. Функция есть ее код + набор доступных для нее переменных, т.е. доступна переменная - с. JS "видит" эту связь и поэтому, когда заканчивается строка кода №25, функция cs2() - уже отработала и по сути должна быть уничтожена в памяти. Но благодаря связи (кода функции d и ее возможности использования в своем коде внешней по отношению к ней переменной - с) переменная - с не удаляется из памяти. Этот процесс называют замыканием. Функции CS2 уже нет (она отработала), а ее переменная - с сохраняется (благодаря замыканию). И к ней имеется доступ через функцию замыкания - d(). Если накосячил с выводами - Поправьте)
Лучшее объяснение. Я как человек из строгой типизации (C#), очень рад, что посмотрел этот видео. Спасибо за пример о "приватном методе", встало в голову железно.
Круто! Подача матеріалу на висоті. Єдині уроки, де я не засинаю. ДЯКУЮ!!!
Навіть собі вже дещо доповнив: )))
function cs2() {
let c = 0;
return function (flag) {
if (flag == '+') c++;
if (flag == '-') c--;
if (flag == '0') c = 0;
return c;
}
}
геніальне пояснення, найкраще що я бачив в неті, дякую!! так тримати
Спасибо огромное! Впервые Вас смотрю, и Ваш канал стал первым, который заставил меня подписаться и получать оповещения о новых видео)) Вы объясняете гениально!
Спасибо Вам что делаете такой понятный и контент, теперь все стало придельно понятно особенно когда был приложен пример из реальных разработок (2:50)
Многие преподаватели знают js, но мало кто может донести свои знания до других. У вас из всех, кого я смотрел, это получается лучше всего
Это лучший дядька из всех учителей, которые мне встречались!!!
Фрагментами понимал, что где и как работает. Только не мог собрать это в одно понимание. Теперь благодаря вам произошло замыкание в голове всех этих пониманий в одно))
Спасибо, я наконец-то разобралась, что такое замыкание. Все очень-очень подробно для таких тугодумов как я :)
ты уже стала фронт энд разрабом?
Лучшее объяснение, что такое замыкание в JavaScript! Вне конкуренции!
Александр, ваши объяснения в JS одни из самых доступных и понятных! Спасибо Вам за труд! Очень достойный контент!
Гениально. Дай Бог здоровья этому человеку
Господь всемогущий, я сидел, читал, столько сложных слов.
Это было так доступно и понятно, спасибо огромное!
Ваши уроки слушать одно удовольствие! Вчера читала в учебникe learn js и поняла, когда смотрела ваше видео, что ничего не поняла из прочитанного) лучше сначала смотреть ваши видео, а я потом читать теорию))
Спасибо. Очень доступно, особенно если предварительно чуть чуть разобрать лексическое окружение.
Кроме тебя никто не смог мне это объяснить ) Продолжай в том же духе мужик , ты - лучший )
гуд!
В 2021 валит Новичок, а не новичка.
А за видео как всегда спасибо. =)
Спасибо большое, теперь действительно понятно. Всегда приятно, когда человек действительно старается объяснить доступно, а не просто как попало, лишь бы просмотров побольше набрать.
У вас талант объяснять сложное просто. Спасибо большое, что делитесь!
Действительно, как мудрёно написано в документации и как просто вы объяснили этот термин, спасибо большое.
Долгое время не понимала замыкания, но это видео разложило все по полочкам! Спасибо!!
Прочитал две статьи по замыканиям, посмотрел 5 видео уроков, и только Вам удалось пробить мой дубовый мозг) Спасибо!
Большое спасибо. До этого читал статью про замыкание, 10 перечитал , ничего не понял. Тут 1 раз посмотрел , все понял.
Спасибо вам огромное! У вас просто превосходно получается объяснять сложные вещи простыми словами! Это талант! Без вас до меня бы очень долго доходило!
Отличный ролик, простейший пример с четко выраженными объяснениями. Благодарю!
Спасибо.
Я ПЕРЕСМОТРЕЛ ДО ХУЯ РОЛИКОВ И СПУСТЯ С ТОЛЬКО РОЛИКОВ ПОЯВИЛАСЬ ЛЕГЕНДА КОТОРАЯ ОБЬЯСНИЛА МНЕ ВСЕ НА ПАЛЬЦАХ
Спасибо за ваши ролики. Прекрасно всё понимаю по вашим примерам.
Хороший урок, все понятно. Захотелось использовать анонимные функции и новый синтаксис, сначала получилось такое:
function cs2() {
let c = 0;
return () => console.log(++c);
}
let d = cs2();
d();
d();
d();
Потом стал рассуждать, а можно ли как то выкинуть cs2(), ведь к ней почти не обращаемся, пыхтел, пыхтел и все таки с подсказкой справился:
let d = (function () {
let c = 0;
return () => console.log(++c);
})();
d();
d();
d();
Понимаю, что код плохо читаемый, но в тоже время, вполне понятный, а самое главное минимум команд. С удовольствием изучил бы еще более короткий вариант.
Лучшее объяснение замыкания на ютубе!!!!
я почемуто создал для себя ассоциацию что замыкание это - замыкание данных между функциями, но тут ..."функцию замыкают на области видимости".. ,четко!.. ВЕЛИКИ ДЗЯКУЙ!.
*Шикарное объяснения автора! Доступно и понятно! Ещё и с объяснениями практического применения. Лайк и подписка*
Не плохое объяснение, спасибо.
// пример замыкания функции
function urlGenerator(domain) {
return function(url) {
return `${url}.${domain}`
}
}
const comUrl = urlGenerator("com")
const ruUrl = urlGenerator("ru")
console.log(comUrl("google"));
console.log(comUrl("netflix"));
console.log(ruUrl("google"));
console.log(ruUrl("netflix"));
Спасибо огромное! Реально тут сразу ясно. Пришел добрый умный дядя и сказал всему интернету что из себя представляет замыкание.
Спасибо. Сколько уже уже учу JS уже даже работаю друном толька сейчас понял что такое замыкание функции. Спасибо. Замыкание функции в Javascript. Function Closures.
Самое лучшее объяснение этой темы!!!!
Наконец-то поняла замыкание. Спасибо большое, Александр!
Как всегда на высоте! Кратко, понятным языком и по делу.
Отличное объяснение максимально простыми словами
Огромное спасибо за такое понятное объяснение!😊
Тот канал, где ставлю лайк на первых секундах, а потом смотрю видео))
Спасибо Алекс! Теперь я понял смысл использования замыкания и областей видимости.
Спасибо! Все крайне понятно и очень доступно объяснено
спасибо!
Это очень крутое объяснение. Спасибо, я стал знать больше, благодаря вам:)
Спасибо большое, 2 дня не понимал эту тему, смотрел много видео. Но тут за 18минут все доступно объяснили, благодарю
Спасибо, мужчина!!
Хоть и повторял одно и то же, это лучше чем заумные бесполезные объяснения)
Спасибо большое за доступное объяснение!
Спасибо большое - все доступно и понятно! Бывает, вот так смотришь - всё вокруг да около, а толком ничего не ясно!
Отличное объяснение, огромное вам спасибо!
Класс! Доступно и просто изложено!
Спасибо за самое лучшее объяснение !!!
Просто огонь, 3 дня пытаюсь разобраться с этой темой, сейчас понял что к чему) Спасибо, лайк + подписка!)
Спасибо за Ваши уроки - они прекрасны и понятны. Очень здорово.
почему ни кто (доходчиво) не упоминает этот момент 10:30. Этож самое важно.
Спасибо! благодаря вашему видео, до конца понял что к чему (по крайней мере саму концепцию)!
Красавчик! Отлично объясняешь!!
Спасибо за максимально подробное разъяснение)
Но, думаю, можно объяснить ещё короче: "Замыкание - это функция, написанная, как класс с одной функцией" и показать конечную запись. Полагаю, было бы достаточно)
По сути, получается просто в d хранится изолированное пространство имён.
Thank you so much. You had explained very simply.
Гениально! дай бог здоровья ))
Интересный момент, который можно не заметить и, возможно, он улучшит понимание. Для замыкания должна быть передана в переменную уже вызванная функция, т.е. со скобками *let a = func( )* , и после чего, тоже вызвана со скобками *a()* , тем временем как обычная функция при таком синтаксисе бросит ошибку
cs 2 )))))) ....отличная аналогия. Объяснили хорошо и доступно, сразу понял на примере, спасибо еще раз !!!
Дуже (дуже (доступно пояснив));
console.log('Дякую!');
True JS Превосходный плейлист!
потрясающее объяснение!
12:52 - а если какой то редиска сделает d = 6? Переменную с то защитили, но редиска убил d... Если вы объявили переменную через let, разве у редиски не вызовет ошибки повторное объявление переменной через let?
уже разобрался, но если бы увидел это видео раньше, то процесс понимания был бы гораздо легче и быстрее)
Лучшее объяснение, что встречал. Спасибо!
Очень круто рассказываете! Понятно, доступно и интересно слушать.
Доступно. Спасибо. Что просто то гениально.
Очень все круто! Спасибо!)
Но хотелось бы увидеть еще чуть более сложный пример с объяснениями) что бы понимать где еще и как именно я(очень-очень новичек) могу использовать замыкание)
Спасибо! Замыкания - очень важная вещь! Раньше не использовал! Теперь буду! 👍👍👍
Спасибо за отличный плейлист с крутым объяснением!
Хех, уже год регулярно использую замыкания, не зная что они называются замыканиями)
вы преподаватель от бога) правда
Хорошо разжовано, спасибо за старания, было очень интересно!
Добрый день. Позвольте вопрос. Может и тупой, но я только учусь :)
Если без замыкания, то в первом случае мы создавали переменную let a = 0, а потом переходили к созданию функции. Это типа плохо, т.к. создаётся "а" - глобальная переменная, все дела, лучше поменьше глобальных переменных, а то её кто-то случайно может переназначить. НО в случае замыкания мы все равно создавали новую переменную d. Это не считается?? Её же тоже может кто-то переназначить... Спасибо.
напишите в телеграмм
Хорошое, понятное объяснения замыканий. Спасибо.
Спасибо за доступное обьяснение!
Рад, что помог!
Все просто и понятно, как обычно. Спасибо )
почему нам надо функцию сохранить и вызвать через переменную d? почему вызов функции cs2() несколько раз не дает результата как d()?
потому что в d сохраняется значение c при каждом ее вызове
Большое спасибо, вы прекрасно объясняете!
очень хорошо объясняете. Спасибо за работу!
Объяснение на 10-ку. Спасибо!
Извините, я недопонял, в цепочке вложенных функций переменная доступна всем или только между родительской и дочерней? Если объявить функцию A, создать в ней переменную aA, и функцию B, которая в свою очередь возвращает функцию C, будет ли в функции C доступна переменная aA, объявленная в "корневой" функции? Иными словами, для функции C область видимости расширяется до B или до A?
Вы лучший, спасибо за ваше время!
Гениальный преподаватель, спасибо вам.
но теперь осталась проблема с переменной "d" - которая теперь глобальная и её тоже можно изменить/перезаписать. Не понимаю логики зачем делать "приватной" одну глобальную переменную, при этом создавая другую
Спасибо! Очень доступно 👍👍👍
Спасибо, всё очень понятно. Автор супер крутой.
Здравствуйте я немогу понять обьект event можете отдельный урок на эту тему сделать почему его передает в параметр функции
Вот это объяснение! Отец!
Идеально объяснили, спасибо)
Здравствуйте, спасибо за урок, объясните пожалуйста, почему каждый раз при вызове функции d, которой присвоена функция cs2 нет переинициализации переменной c? Ведь первой строчкой в функции cs2 идет объявление переменной c = 0, почему в таком случае при каждом вызове функции она инкрементируется, а не начинается с нуля?)
тоже об этом подумал
@@antonkanevets4994 Нашел по итогу ответ, все из-за сборщика мусора. Переменная не удаляется из памяти т;к на эту переменную есть ссылка
Спасибо! Реально круто поясняешь
Можно вопрос - зачем? Ведь точно так же как объявляется глобальная переменная в случае без замыкания, мы объявляем другую глобальную переменную которой присваиваем функцию. Получается только больше кода с одним результатом - имеется глобальная переменная, которую в обоих случаях можно переопределить.