Для меня всегда было загадкой нагнетание ветра вокруг Замыкания. Это же элементарная вещь, что нам наглядно продемонстрировал своим изложением Александр. В литературе же его описывают такими страшными словами, что студент в панике просто перелистывает дальше...
Вообще все видео Александра офигенно понятные! Если мне попадается тема,где что-то догнать не могу,сразу лезу искать здесь на канале ваши объяснения😊и после этого,всё сразу по полочкам раскладывается
Здравствуйте! Давно смотрю ваш канал. И советую всем кто хочет изучить js. потому что на всем ютуб нет более полезного канала. Огромное спасибо вам за ваши труды!! И хотел задать вопрос: Не планируете ли вы записать видео о drag and drop. Так как все видео на ютубе о этой теме давно устарели, их очень мало, и почти все на английском языке. А в HTML Появился атрибут "draggable" интересно было бы посмотреть его в связке с drag and drop. как вариант - сделать урок про drag and drop в виде "пишем пазлы на js"
Есть такая поговорка: "Голь на выдумки хитра". Это как раз про замыкания - этакая инкапсуляция для нищих. Когда в нормальных ООП языках достаточно было объявить класс с приватным полем и методом, в javascript нашли вот такое решение как объединить данные (состояние) с функцией. Сейчас в js завезли наконец классы, теперь про замыкания можно забыть.
Если честно, меня удивляют комментарии к данному видео и конкретно данное видео. Нахожусь в средине курса в данньій момент, но решил глянуть что ждет в конце js 2.0. Я думал данньій подход с локальньіми областями видимости логично понятен всем🧐
Здравствуйте! Спасибо за прекрасные уроки, вы супер. Я недавно начал знакомиться с JS и вот пытаюсь комментировать данный урок, так как в комментах есть вопрос: "Почему нельзя вызвать сразу функцию, а только через переменную?". И в этом есть хитрость данного счётчика. Счётчик работает не из-за функции замыкания, а из-за способа его вызова, она как бы повторяет работу обычной функции с глобальной переменной. Это легко проверить если анонимной функции дать имя и вызвать его двумя способами. В первом случае его просто вернуть без скобок в родительской функции, а во втором случае его вернуть со скобками, по сути вызывать его внутри родителя. В первом случае обработчик вынужден создать область видимости для функции так как у него находится функция с именем, которая возвращена, но не вызвана - то есть вызывается через переменную, а значит будет работать счётчик и локальная переменная, которая в данном случае имеет преимущество, будет перезаписана вновь и вновь, как это происходит в вашем случае с анонимной функцией или с функцией, которая обращается к глобальной переменной. Во втором случае обработчик получает функцию замыкания с именем, которая возвращена со скобками, то есть вызвана, и которая сразу перезаписывает локальную переменную и всё закончено, и никаких преимуществ для локальной переменной при создании счётчика, а только для функции. Если я, как и многие другие, нахожусь в заблуждении - то прошу вас прокомментировать или создать видеоурок по данному вопросу.
Имхо, замыкание - чрезвычайно интуитивное понятие. Даже новичок, как только что изучил function, решает написать функцию. И пусть она вернет функцию. А область видимости лежит в интуитивной плоскости, изначально "чувствуешь", что контекст не потеряется. Зато академически замыкание можно описать так, что мало кто поймет, лишь только не все.
И я всё равно не понимаю почему при вызове функции "b()" значение переменной "а" каждый раз не перезаписывается на "0". Ведь строка "let a = 0" стоит перед "return function". Или это происходит по причине того, что переменную "а" не можно создать снова, т.к. она уже хранится в памяти переменной "b" ???
В переменные b и c помещается не функция t1, а РЕЗУЛЬТАТ ВЫЗОВА функции t1, об этом говорят круглые скобки после t1 (let b = t1() ). Что является результатом вызова t1? Возврат (return) безымянной функции function () { a = a + 1; return a}, о чём хорошо говорит вывод console.log(b) и там НЕТ никакого объявления переменной let a = 0. Т.е. в переменных b и c содержатся экземпляры функций и её (замкнутого) окружения, конкретно переменная a, необходимая для её работы, со значением 0. Функция всего лишь "запомнила" это значение. И каждый вызов функций b и c приводит к увеличению запомненного значения на 1, причём каждая из них помнит своё значение. У функции t1 вспомогательная роль, она просто ограничивает область видимости безымянной функции внутри неё, причём из вне. Я так понял это видео, может где ошибся с формулировками.
Смысл в том, что так можно создавать сколько угодно независимых экземпляров этой функции со своими собственными областями видимости, в видео это были переменные b и c
Там переменной b присваивается не функция t1, а результат вызова этой функции. Сам тоже не с первого раза понял. Чем-то похоже на конструктор в ООП подходе.
Поясните кто шарит? Потому что по мне все происходящее не логично. Изначально же было сказано, что переменная живет, пока функция работает или что то в этом роде. По мне должно быть так, что при каждом вызове функции t1 в данном примере - переменная a объявляется заново и далее 1 раз увеличивается на 1. Почему сохраняется ее значение если функция отработала. Т.е. как я вижу это: Вызов функции t1 В ней объявляется a=0. Возвращается другая функция, которая увеличивает a++. Функция t1 своё отработала. При следующем вызове разве не должно все повторится с начала, заново объявится a=0.
Тот случай, когда человек хочет, чтоб другие поняли замыкания, а не показать что он их знает. Очень доходчиво объясняете, спасибо
Сложно? Нет. Нужно просто уметь доходчиво объяснить))). Три дня , n'ое кол-во материала и о чудо нужный ресурс.Спасибо, ты супер.
Спасибо
Тоже три дня читал умные статьи и ничего не понял, зачем это нужно. Здесь 20 минут и все понятно
Я однажды понял что такое замыкание, но так и понял почему такое название. И только сейчас допер, что замыкается ОБЛАСТЬ ВИДИМОСТИ. Большое спасибо
"Замыкания" - это замыкание области видимости на какой - то объем (scope) переменной. 18:50
Наверное самый доступный видос по замыканиям. Даже лучше Минина.
Для меня всегда было загадкой нагнетание ветра вокруг Замыкания. Это же элементарная вещь, что нам наглядно продемонстрировал своим изложением Александр. В литературе же его описывают такими страшными словами, что студент в панике просто перелистывает дальше...
У вас талант объяснять сложные вещи простым языком
Спасибо большое. Лучшее обьяснение что я нашел. Даже в платных курсах эту тему не объяснили так понятно как Вы. Дай Бог Вам здоровья!!!
очень понятно, спасибо Александр,,, доходчиво и на простых примерах
Александр, ваш канал - клад и я его нашел. Столько информации и все бесплатно!! Респект и уважение!
Вообще все видео Александра офигенно понятные! Если мне попадается тема,где что-то догнать не могу,сразу лезу искать здесь на канале ваши объяснения😊и после этого,всё сразу по полочкам раскладывается
как всегда гениально и просто объяснил, даже тупой бы понял 👍🏻 ТАЛАНТ!
очень крутой мужик , многое понятно объясняет!! спасибо.
Самый адекватный и понятный ролик по замыканиям. Спасибо тебе, золотой человек.
Ваше желание научить очень внушительное... Понятно, удобно, очень четко.
Прошёл курс по JS - все хорошо. Можно приобретать. Особенно понравилось кол-во практики и поддержка в телеграмме и на форуме.
Вы единственный человек, который смог доходчиво и простым языком объяснить что такое замыкание. Спасибо вам.
Храни вас вселенная !!!! Самое адекватное объяснение вообще из всех возможных!!!!!
Господи спасибо. Самые полезные 20 минут в моей жизни
Супер. В первый раз просмотра было не понятно, второй - просто наслаждение для понимания. Благодарю)))
Всегда удивлялся Вам как Вы сложные вещи умеете объяснять просто! Вы большой молодец !
Спасибо тебе человек! Программист с 10 летним опытом не смог мне объяснить, а тут 20 мин а вуаля)))
Круто, очень доступно и понятно объясняете! Спасибо!
Вот за это я и люблю JavaScript .., всегда есть над чем по-извращаться...
Спасибо !
Alleks Grinn ахахах))
гениальная подача! 20 минут и все понятно)
Аааа спасибо тебе добрый человек, единственное видео, после которого я абсолютно четко понял что такое замыкание! Благодарю!!!! Спасибо 🍺
капец!))) как четко всё прям разжевано))) благодарю Вас за это видео))
Отличные видеоуроки! Все доступно, понятно и с привязкой к примерам. Спасибо автору огромное за труд и старания!
Я думал что замыкания это что то страшное , а это просто замыкание области видимости )
Потрясающе! Спасибо за подробные объяснения
Лучшее объяснение которое слышал, очень наглядный пример, cпасибо большое
Спасибо за видео, лучшее объяснение которое видел, видел я их достаточно много
Спасибо за полезнейшее видео!!!
Спасибо, вы очень помогли)) от других авторов материалы на эту тему довольно непонятные.
Большое спасибо. Объяснение очень четкое и ясное.
Самое понятное объяснение из всех услышанных!
Как всегда на высоте качество контента.
Спасибо!!! Оказалось очень просто всё!
Спасибо 👍👍👍
Шикарные уроки. Отлично преподаёте!
И как я раньше не мог этого понять. Спасибо
чудовий матерiал. Дуже дякую))
Здравствуйте! Давно смотрю ваш канал. И советую всем кто хочет изучить js. потому что на всем ютуб нет более полезного канала. Огромное спасибо вам за ваши труды!!
И хотел задать вопрос: Не планируете ли вы записать видео о drag and drop. Так как все видео на ютубе о этой теме давно устарели, их очень мало, и почти все на английском языке. А в HTML Появился атрибут "draggable" интересно было бы посмотреть его в связке с drag and drop.
как вариант - сделать урок про drag and drop в виде "пишем пазлы на js"
Отлично, посмотрел ваш урок и понял для чего нужно замыкание
Спасибо!
Очень хорошее объяснение, спасибо вам большое.
Дуже потрібна штука! Дякую
Лучшее объяснение
Круто! Спасибо! Я понимал но сейчас разобрался
Лайк подписка и пожизненная благодарность!!!
Алекс спасибо Вам!! я за 20 минут понял больше, чем за неделю зубрежки документации!
Просто шикарно...Лайк
Спасибо за урок.
Вау
Просмотрел до этого 3 объяснения от других блогеров, но только тут я понял
Курсы, которые реально стоят того, что бы их купить
Спасибо!
Супер поняла наконец то респект автору
Наконец-то я понял! Спасибо!
лучший! благодарствую
Замкнул знания. Спасибо
Прекрасный курс! Впрочем, как и Ваши предыдущие курсы :)
Всё очень доходчиво, спасибо.
Огромное спасибо!
Спасибо вроде стало понятно
Благодарю, понял.
Спасибо за Ваш труд!
Невероятно!! Спасибо Вам!!
Есть такая поговорка: "Голь на выдумки хитра". Это как раз про замыкания - этакая инкапсуляция для нищих. Когда в нормальных ООП языках достаточно было объявить класс с приватным полем и методом, в javascript нашли вот такое решение как объединить данные (состояние) с функцией. Сейчас в js завезли наконец классы, теперь про замыкания можно забыть.
Кроме ООП, есть и другие подходы в программировании.
Хорошее объяснение
Спасибо. Очень просто и понятно!
Лайк очень полезно и понятно
видео настолько хорошее, что я просто хочу его скачать)) так что если что-то случится, у меня есть видео
)
Не знал, что так можно) Круто)
Давненько на js кодю, но мало понимал что это. Щас стало ясно.
Стало еще чуточку понятнее! 😆
Прекрасное объяснение!
Очень понятно спасибо
спасибо, наконец то понял!
Спасибо
спасибо большое!!!
Супер 🖒
Раньше, когда не было в js классов, именно так ООП и реализовали. Просто для новичков нужно пояснить, что любая функция js - это объект js.
огромное. вчера только с debounce столкнулся , и подвис из-за замыкания
Да, я тоже наткнулся на такое же самое простое объяснение замыканий.
Еще и тестировать функцию, опирающуюся на глобальную переменную, мягко скажем, затруднительно.
Спасибо большое!
Хорошее видео, спасибо!
Если честно, меня удивляют комментарии к данному видео и конкретно данное видео. Нахожусь в средине курса в данньій момент, но решил глянуть что ждет в конце js 2.0. Я думал данньій подход с локальньіми областями видимости логично понятен всем🧐
Почему счётчик растёт на 1? На втором и последующих шагах(вызовах t1) для одной и той же области видимости мы каждый раз снова проходим через a=0;
Классный урок, все уроки классные! Можно тупой вопрос задам?:)
А можно переменную задать как Const и не мучаться с замыканиями?
Ахахаахахахаха, действительно))) ты гений))
Нет, так не будет работать, так как Сonst нельзя изменять
Здравствуйте! Спасибо за прекрасные уроки, вы супер. Я недавно начал знакомиться с JS и вот пытаюсь комментировать данный урок, так как в комментах есть вопрос: "Почему нельзя вызвать сразу функцию, а только через переменную?". И в этом есть хитрость данного счётчика. Счётчик работает не из-за функции замыкания, а из-за способа его вызова, она как бы повторяет работу обычной функции с глобальной переменной. Это легко проверить если анонимной функции дать имя и вызвать его двумя способами. В первом случае его просто вернуть без скобок в родительской функции, а во втором случае его вернуть со скобками, по сути вызывать его внутри родителя. В первом случае обработчик вынужден создать область видимости для функции так как у него находится функция с именем, которая возвращена, но не вызвана - то есть вызывается через переменную, а значит будет работать счётчик и локальная переменная, которая в данном случае имеет преимущество, будет перезаписана вновь и вновь, как это происходит в вашем случае с анонимной функцией или с функцией, которая обращается к глобальной переменной. Во втором случае обработчик получает функцию замыкания с именем, которая возвращена со скобками, то есть вызвана, и которая сразу перезаписывает локальную переменную и всё закончено, и никаких преимуществ для локальной переменной при создании счётчика, а только для функции. Если я, как и многие другие, нахожусь в заблуждении - то прошу вас прокомментировать или создать видеоурок по данному вопросу.
Все верно.
Имхо, замыкание - чрезвычайно интуитивное понятие. Даже новичок, как только что изучил function, решает написать функцию. И пусть она вернет функцию. А область видимости лежит в интуитивной плоскости, изначально "чувствуешь", что контекст не потеряется. Зато академически замыкание можно описать так, что мало кто поймет, лишь только не все.
о, просветление пришло, спасибо вам!
Зрозуміло все з першого разу
выглядит как class T1( внутри есть переменная и метод работы с переменной)
let b = new T1();
let c = new T1();
Сколько вспомнилось Своих ошибок )))
И я всё равно не понимаю почему при вызове функции "b()" значение переменной "а" каждый раз не перезаписывается на "0". Ведь строка "let a = 0" стоит перед "return function". Или это происходит по причине того, что переменную "а" не можно создать снова, т.к. она уже хранится в памяти переменной "b" ???
В переменные b и c помещается не функция t1, а РЕЗУЛЬТАТ ВЫЗОВА функции t1, об этом говорят круглые скобки после t1 (let b = t1() ). Что является результатом вызова t1? Возврат (return) безымянной функции function () { a = a + 1; return a}, о чём хорошо говорит вывод console.log(b) и там НЕТ никакого объявления переменной let a = 0. Т.е. в переменных b и c содержатся экземпляры функций и её (замкнутого) окружения, конкретно переменная a, необходимая для её работы, со значением 0. Функция всего лишь "запомнила" это значение. И каждый вызов функций b и c приводит к увеличению запомненного значения на 1, причём каждая из них помнит своё значение. У функции t1 вспомогательная роль, она просто ограничивает область видимости безымянной функции внутри неё, причём из вне.
Я так понял это видео, может где ошибся с формулировками.
klass
да еще и художник)!!!
Я бы сказал нужно понимать не как работает функция, а как выделяется память под эти функции.
Подскажите пожалуйста. Вот уже в конце, когда полностью создали функцию, почему нельзя вызвать ее сразу? t1() а надо присвоить её переменной b?
Подскажите, почему надо присваивать переменной b функцию t1? Почему нельзя работать с функцией t1 напрямую? какой-то в этом смысл?
Смысл в том, что так можно создавать сколько угодно независимых экземпляров этой функции со своими собственными областями видимости, в видео это были переменные b и c
@@Fovaxus Угу, этакая инкапсуляция для нищих.
Там переменной b присваивается не функция t1, а результат вызова этой функции.
Сам тоже не с первого раза понял.
Чем-то похоже на конструктор в ООП подходе.
Поясните кто шарит?
Потому что по мне все происходящее не логично. Изначально же было сказано, что переменная живет, пока функция работает или что то в этом роде.
По мне должно быть так, что при каждом вызове функции t1 в данном примере - переменная a объявляется заново и далее 1 раз увеличивается на 1. Почему сохраняется ее значение если функция отработала.
Т.е. как я вижу это:
Вызов функции t1
В ней объявляется a=0.
Возвращается другая функция, которая увеличивает a++.
Функция t1 своё отработала.
При следующем вызове разве не должно все повторится с начала, заново объявится a=0.
А все, почитал комменты - понял,
Переменным b и c присваивается то, что возвращает функция t1, т.е. функция, увеличивающая счётчик в функции t1.
не кодю впринципе, но я понял эту тему и я не вижу тут сложностей, видать сказывается грамотное и в тоже время просто объяснение автора.