Замыкания в JavaScript с примерами. Фундаментальный JavaScript
Вставка
- Опубліковано 4 лис 2020
- Исторически тема замыканий (closure) одна из самых труднопонимаемых в JavaScript. Поэтому в этом видео мы разберем ее максимально подробно - порисуем и разберем несколько примеров.
По сути, когда речь идет о замыкании, это значит, что какая-то функция в результате своей работы возвращает (через оператор return) новую функцию, которая в свою очередь "запоминает" всю информацию об окружавших её переменных. Давайте разбираться!
#javascript #замыкание
__
Мои курсы по вебу с купонами:
✅ mishanep.com/
📢 Поддержка канала:
/ mishanep
www.tinkoff.ru/rm/nepomnyasch...
paypal.me/mishanep
Отличное видео, которое показывает, как все работает изнутри, а это и есть самое важное! Спасибо большое!!!
Молодец, что в объяснении затронул Scopes. Спасибо!
Способ, с помощью которого я навсегда запомнил замыкания - это сравнение их с рюкзаком. Когда функция создана и передаётся куда-либо, или возвращается из другой функции, то она носит с собой рюкзак. А в этом рюкзаке хранятся все переменные, которые были в области видимости во время создания этой функции.
это называется [[scope]]
Это самое лучшее объяснение замыкания в моей жизни, спасибо тебе огромное
так можно ответить на собеседовании?))))
Нужно :)
@@etemax
спасибо за [[Scope]]. Инсайт!
Спасибо большое за ваши старания ! С вашими уроками учёба становится легкой и супер интересной !
Спасибо за урок!
Михаил, спасибо большое, очень интересное и понятное объяснение 👍
спасибо за объяснения работы замыкания изнутри!было интересно,нужно еще пару раз посмотреть чтобы все уловить)
Нашел замыкания, спасибо
Спасибо!
Лично у меня получилось понять замыкания, когда я продебажил все строчки кода и увидел как ведет себя js. Какая у него последовательность действий и что именно делают эти действия. Может кому-то это тоже поможет. Всем удачи! Михаилу спасибо за полезный контент.
Спасибо)
Спасибо
отлично объясняешь, голос приятный. Молодец!
Круто, спасибо! Давно хотел понять что такое мемоизация - как раз созрел )
мемоизация не может возвращать один и тот же результат всегда... все должно зависеть от аргументов, которые вы передаете в ф-цию... из аргументов мы получаем что-то типа хэша или просто JSON.stringify(args) - и используем это значение как вычисляемый ключ, для хранения результатов... как-то так...
Круто
спасибо)
Просто лучший!
В последнем примере, получается что функция замыкает в себе состояние? сильно, прям будто локальный стейт компонента во фреймворке. Я правильно понимаю?
Приятный голос)
чел...))))))))))
@@nastenaozu ахаххаахха
Я так и не пойму, контекст или же скоуп, это одно и тоже, что стэковый фрейм функции?(как в c# к примеру
)
вау
Чтобы лучше понимать как работают замыкания, стоит сначала разобраться как работает "сборщик мусора" в js... это напрямую связанные вещи
Было бы хорошо обсудить пример с каунтером.
function useCounter() {
let state = 0
function inc() {
state++
}
function dec() {
state--
}
return [state, dec, inc]
}
counter // 0
increment()
counter // 0
Как сделать так, что бы возвращалось обновленное значение каунтера?
P.s. функцию не предлагать.
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 сам новичок поэтому, если что не так, то сильно не пинайте
@@jefryredgenaldchen3936 в реакте ты не функцию получаешь. Так не годится)
@@v.demchenko а ну так я до реакта еще даже не добрался)) говорю ж - новичок, так балуюсь))
В самом первом примере, консоль выводит ошибку: 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
В чём дело?
Внутри функции createFn вы создали новую функцию и сразу ее вызвали. В результате вы вернули из createFn вместо новой функции, результат ее вызова. В данном случае undefined
@@mishanep да, но это же один в один ваш код. Только у вас показывает, что это функция, а у меня undefined. Как такое возможно, код же одинаковый?
@@user-hj3zu5tk4h значит не одинаковый. Уберите круглые скобки после return greeting
@@mishanep точно! Виноват, простите! Спасибо Вам большое!
ты для начала разберись в разнице между "Вызвать функцию" и "Передать функцию", а потом уже такие темы учи
Честно говоря я не понял, остались вопросы. Пойду дальше искать видео, где разъясняют для совсем отсталых.
Александр лущенко
а при использовании стрелочных функций?
То же самое. Замыкание - не про стиль написания функций, а больше про скоуп создаваемых функций.
@@mishanep спасибо. да, я сам сделал на стрелочных. но рассказав и показав сейчас на собеседовании то что тут увидел и услышал, получил нелестную оценку от спрашивавшего. определение замыкания и его свойства и особенности несколько не так он ожидал услышать.
@@romanmed9035 а чего ожидали?
@@mishanep дословно не рассказано. это же не урок где можно попросить подробнее рассказать. но как я понял основной упор на контекст при создании замыкания. при решении задачи воспользовался полученным при просмотре этого видео знанием, которого оказалось недостаточным и ответ оказался совсем не верным. что-то не так с контекстом, поэтому не правильно указал что выведет функция. сохранить задание для анализа не позволили.
@@romanmed9035 Вообще, когда уверен, можно и поспорить, и уточнить что хотят. В принципе слабо себе представляю кейсы, где могло бы понадобиться использовать контекст вместе с замыканием. Замыкание больше про область видимости. Здесь больше похоже на попытку запутать.
сижу и не понимаю зачем там ...args
иллюстрация еще больше путает смотрящего... кто не понимает что такое Замыкание может еще больше запутаться... это можно лучше и проще объяснить просто на словах. Есть ролики на эту тему более развернутые. Но за видео спасибо, у вас много полезных роликов...
Очень многословное объяснение. Уводящее внимание слушателя от сути.
Такое чувство, что жабастриптизёры сами не понимают, как работает язык
Отвратительно
не для средних умов