Замыкания в JavaScript с примерами. Фундаментальный JavaScript

Поделиться
HTML-код
  • Опубликовано: 4 ноя 2020
  • Исторически тема замыканий (closure) одна из самых труднопонимаемых в JavaScript. Поэтому в этом видео мы разберем ее максимально подробно - порисуем и разберем несколько примеров.
    По сути, когда речь идет о замыкании, это значит, что какая-то функция в результате своей работы возвращает (через оператор return) новую функцию, которая в свою очередь "запоминает" всю информацию об окружавших её переменных. Давайте разбираться!
    #javascript #замыкание
    __
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    / mishanep
    www.tinkoff.ru/rm/nepomnyasch...
    paypal.me/mishanep

Комментарии • 61

  • @tanyatritelnitskaya1911
    @tanyatritelnitskaya1911 3 года назад +11

    Отличное видео, которое показывает, как все работает изнутри, а это и есть самое важное! Спасибо большое!!!

  • @pfk9025
    @pfk9025 3 года назад +7

    Молодец, что в объяснении затронул Scopes. Спасибо!

  • @alexey_samokhin
    @alexey_samokhin Год назад +39

    Способ, с помощью которого я навсегда запомнил замыкания - это сравнение их с рюкзаком. Когда функция создана и передаётся куда-либо, или возвращается из другой функции, то она носит с собой рюкзак. А в этом рюкзаке хранятся все переменные, которые были в области видимости во время создания этой функции.

    • @JackSteamBoy
      @JackSteamBoy Год назад +1

      это называется [[scope]]

    • @Ivan-ee4pz
      @Ivan-ee4pz Год назад +1

      Это самое лучшее объяснение замыкания в моей жизни, спасибо тебе огромное

    • @etemax
      @etemax 11 месяцев назад +1

      так можно ответить на собеседовании?))))

    • @OneMrZlodey
      @OneMrZlodey 5 месяцев назад

      Нужно :)
      @@etemax

  • @user-kq5ow1zv3m
    @user-kq5ow1zv3m 3 месяца назад

    спасибо за объяснения работы замыкания изнутри!было интересно,нужно еще пару раз посмотреть чтобы все уловить)

  • @____Olga__
    @____Olga__ 3 года назад +5

    спасибо за [[Scope]]. Инсайт!

  • @alsusayfulina1865
    @alsusayfulina1865 Год назад +1

    Михаил, спасибо большое, очень интересное и понятное объяснение 👍

  • @ekaterinaskrynnik6932
    @ekaterinaskrynnik6932 9 месяцев назад

    Спасибо большое за ваши старания ! С вашими уроками учёба становится легкой и супер интересной !

  • @RewCSharp
    @RewCSharp 3 месяца назад +1

    Спасибо за урок!

  • @mityadima
    @mityadima 2 года назад

    Нашел замыкания, спасибо

  • @unknown.6914
    @unknown.6914 2 месяца назад

    Лично у меня получилось понять замыкания, когда я продебажил все строчки кода и увидел как ведет себя js. Какая у него последовательность действий и что именно делают эти действия. Может кому-то это тоже поможет. Всем удачи! Михаилу спасибо за полезный контент.

  • @surr3955
    @surr3955 3 года назад +3

    Круто, спасибо! Давно хотел понять что такое мемоизация - как раз созрел )

    • @AndrewFloatrx
      @AndrewFloatrx Год назад

      мемоизация не может возвращать один и тот же результат всегда... все должно зависеть от аргументов, которые вы передаете в ф-цию... из аргументов мы получаем что-то типа хэша или просто JSON.stringify(args) - и используем это значение как вычисляемый ключ, для хранения результатов... как-то так...

  • @stanislavasgoldyckis7740
    @stanislavasgoldyckis7740 2 года назад +1

    Спасибо

  • @yantakushevich1014
    @yantakushevich1014 Год назад

    отлично объясняешь, голос приятный. Молодец!

  • @sergeyzatsepin513
    @sergeyzatsepin513 3 года назад

    Спасибо!

  • @agataageeva424
    @agataageeva424 3 года назад

    Спасибо)

  • @glaciron
    @glaciron Год назад +1

    Круто

  • @user-ud3ze6wy2j
    @user-ud3ze6wy2j Год назад

    Просто лучший!

    • @user-ud3ze6wy2j
      @user-ud3ze6wy2j Год назад

      В последнем примере, получается что функция замыкает в себе состояние? сильно, прям будто локальный стейт компонента во фреймворке. Я правильно понимаю?

  • @mr.listok
    @mr.listok 6 месяцев назад

    спасибо)

  • @user-hm1kc3zo9r
    @user-hm1kc3zo9r 3 года назад +5

    Приятный голос)

  • @user-qi6vq3gb9s
    @user-qi6vq3gb9s Год назад

    Я так и не пойму, контекст или же скоуп, это одно и тоже, что стэковый фрейм функции?(как в c# к примеру
    )

  • @user-jj3zm1jx7z
    @user-jj3zm1jx7z 2 года назад +1

    вау

  • @v.demchenko
    @v.demchenko Год назад

    Было бы хорошо обсудить пример с каунтером.
    function useCounter() {
    let state = 0
    function inc() {
    state++
    }
    function dec() {
    state--
    }
    return [state, dec, inc]
    }
    counter // 0
    increment()
    counter // 0
    Как сделать так, что бы возвращалось обновленное значение каунтера?
    P.s. функцию не предлагать.

    • @jefryredgenaldchen3936
      @jefryredgenaldchen3936 Год назад

      function useCounter() {
      let state = 0
      return {
      inc: function () {
      state++
      },
      dec: function () {
      state--
      },
      value: function () {
      return state
      },
      }
      }
      const result = useCounter()
      result.inc() //1
      result.inc() //2
      result.dec() //1
      console.log(result.value()) //1
      P.S. тебе наверное уже не актуально, но вдруг кому пригодится
      P.P.S сам новичок поэтому, если что не так, то сильно не пинайте

    • @v.demchenko
      @v.demchenko Год назад

      @@jefryredgenaldchen3936 в реакте ты не функцию получаешь. Так не годится)

    • @jefryredgenaldchen3936
      @jefryredgenaldchen3936 Год назад +1

      @@v.demchenko а ну так я до реакта еще даже не добрался)) говорю ж - новичок, так балуюсь))

  • @user-hj3zu5tk4h
    @user-hj3zu5tk4h Год назад

    В самом первом примере, консоль выводит ошибку: Uncaught TypeError: helloWorld is not a function
    Если написать такой код:
    function createFn() {
    function greeting() {
    console.log('hello world');
    }
    return greeting();
    }
    const helloWorld = createFn();
    console.log(typeof helloWorld);
    helloWorld();
    При этом console.log(typeof helloWorld); выдает: undefined
    В чём дело?

    • @mishanep
      @mishanep  Год назад +1

      Внутри функции createFn вы создали новую функцию и сразу ее вызвали. В результате вы вернули из createFn вместо новой функции, результат ее вызова. В данном случае undefined

    • @user-hj3zu5tk4h
      @user-hj3zu5tk4h Год назад

      @@mishanep да, но это же один в один ваш код. Только у вас показывает, что это функция, а у меня undefined. Как такое возможно, код же одинаковый?

    • @mishanep
      @mishanep  Год назад +2

      @@user-hj3zu5tk4h значит не одинаковый. Уберите круглые скобки после return greeting

    • @user-hj3zu5tk4h
      @user-hj3zu5tk4h Год назад

      @@mishanep точно! Виноват, простите! Спасибо Вам большое!

    • @user-qi6vq3gb9s
      @user-qi6vq3gb9s Год назад +1

      ты для начала разберись в разнице между "Вызвать функцию" и "Передать функцию", а потом уже такие темы учи

  • @AndrewFloatrx
    @AndrewFloatrx Год назад +1

    Чтобы лучше понимать как работают замыкания, стоит сначала разобраться как работает "сборщик мусора" в js... это напрямую связанные вещи

  • @romanmed9035
    @romanmed9035 Год назад

    а при использовании стрелочных функций?

    • @mishanep
      @mishanep  Год назад +1

      То же самое. Замыкание - не про стиль написания функций, а больше про скоуп создаваемых функций.

    • @romanmed9035
      @romanmed9035 Год назад

      @@mishanep спасибо. да, я сам сделал на стрелочных. но рассказав и показав сейчас на собеседовании то что тут увидел и услышал, получил нелестную оценку от спрашивавшего. определение замыкания и его свойства и особенности несколько не так он ожидал услышать.

    • @mishanep
      @mishanep  Год назад

      @@romanmed9035 а чего ожидали?

    • @romanmed9035
      @romanmed9035 Год назад

      @@mishanep дословно не рассказано. это же не урок где можно попросить подробнее рассказать. но как я понял основной упор на контекст при создании замыкания. при решении задачи воспользовался полученным при просмотре этого видео знанием, которого оказалось недостаточным и ответ оказался совсем не верным. что-то не так с контекстом, поэтому не правильно указал что выведет функция. сохранить задание для анализа не позволили.

    • @mishanep
      @mishanep  Год назад +1

      @@romanmed9035 Вообще, когда уверен, можно и поспорить, и уточнить что хотят. В принципе слабо себе представляю кейсы, где могло бы понадобиться использовать контекст вместе с замыканием. Замыкание больше про область видимости. Здесь больше похоже на попытку запутать.

  • @ruslanhd7262
    @ruslanhd7262 2 года назад +4

    Честно говоря я не понял, остались вопросы. Пойду дальше искать видео, где разъясняют для совсем отсталых.

  • @pogrebnoimaksim
    @pogrebnoimaksim Год назад +1

    иллюстрация еще больше путает смотрящего... кто не понимает что такое Замыкание может еще больше запутаться... это можно лучше и проще объяснить просто на словах. Есть ролики на эту тему более развернутые. Но за видео спасибо, у вас много полезных роликов...

  • @404Negative
    @404Negative 3 месяца назад

    сижу и не понимаю зачем там ...args

  • @cyrilanisimov
    @cyrilanisimov 5 месяцев назад

    Очень многословное объяснение. Уводящее внимание слушателя от сути.
    Такое чувство, что жабастриптизёры сами не понимают, как работает язык

  • @snailbobo
    @snailbobo 3 года назад +2

    Отвратительно