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