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