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

Поділитися
Вставка
  • Опубліковано 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 11 місяців тому +1

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

    • @etemax
      @etemax 11 місяців тому +1

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

    • @OneMrZlodey
      @OneMrZlodey 5 місяців тому

      Нужно :)
      @@etemax

  • @____Olga__
    @____Olga__ 3 роки тому +5

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

  • @ekaterinaskrynnik6932
    @ekaterinaskrynnik6932 9 місяців тому

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

  • @RewCSharp
    @RewCSharp 3 місяці тому +1

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

  • @alsusayfulina1865
    @alsusayfulina1865 Рік тому +1

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

  • @user-kq5ow1zv3m
    @user-kq5ow1zv3m 3 місяці тому

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

  • @mityadima
    @mityadima 2 роки тому

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

  • @sergeyzatsepin513
    @sergeyzatsepin513 3 роки тому

    Спасибо!

  • @unknown.6914
    @unknown.6914 2 місяці тому

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

  • @agataageeva424
    @agataageeva424 3 роки тому

    Спасибо)

  • @stanislavasgoldyckis7740
    @stanislavasgoldyckis7740 2 роки тому +1

    Спасибо

  • @yantakushevich1014
    @yantakushevich1014 Рік тому

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

  • @surr3955
    @surr3955 3 роки тому +3

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

    • @AndrewFloatrx
      @AndrewFloatrx Рік тому

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

  • @glaciron
    @glaciron Рік тому +1

    Круто

  • @mr.listok
    @mr.listok 6 місяців тому

    спасибо)

  • @user-ud3ze6wy2j
    @user-ud3ze6wy2j Рік тому

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

    • @user-ud3ze6wy2j
      @user-ud3ze6wy2j Рік тому

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

  • @user-hm1kc3zo9r
    @user-hm1kc3zo9r 3 роки тому +5

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

  • @user-qi6vq3gb9s
    @user-qi6vq3gb9s Рік тому

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

  • @user-jj3zm1jx7z
    @user-jj3zm1jx7z 2 роки тому +1

    вау

  • @AndrewFloatrx
    @AndrewFloatrx Рік тому +1

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

  • @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

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

  • @ruslanhd7262
    @ruslanhd7262 2 роки тому +4

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

  • @romanmed9035
    @romanmed9035 Рік тому

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

    • @mishanep
      @mishanep  Рік тому +1

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

    • @romanmed9035
      @romanmed9035 Рік тому

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

    • @mishanep
      @mishanep  Рік тому

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

    • @romanmed9035
      @romanmed9035 Рік тому

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

    • @mishanep
      @mishanep  Рік тому +1

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

  • @404Negative
    @404Negative 3 місяці тому

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

  • @pogrebnoimaksim
    @pogrebnoimaksim Рік тому +1

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

  • @cyrilanisimov
    @cyrilanisimov 5 місяців тому

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

  • @snailbobo
    @snailbobo 3 роки тому +2

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