Тёмный

Замыкания в JavaScript | Юрий Федоренко 

Hillel IT School
Подписаться 81 тыс.
Просмотров 64 тыс.
50% 1

Замыкания - одна из самых мощных особенностей JavaScript, без них ни туда, ни сюда.
Это комбинация функции и лексического окружения, в котором эта функция была определена. Другими словами, замыкание даёт вам доступ к Scope внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз при создании функции, во время её создания.
Про то что такое Замыкание в Джаваскрипте, рассказывает Senior Software Developer Юрий Федоренко.
Подписывайтесь на телеграм-канал t.me/callforward
Компьютерная Школа Hillel
site: ithillel.ua
fb: / hillel.it.school
in: / hillel_itschool
tw: / hillel_itschool
ln: / hillel_itschool
yt: / hillelitschool
#javascript #frontend #js #замыкания #прототипы

Опубликовано:

 

6 сен 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 132   
@liveinenduro2647
@liveinenduro2647 5 лет назад
так объяснял что сам понял - тру стори
@anastasiazaytseva6922
@anastasiazaytseva6922 5 лет назад
Такие видюшки помогают быстро освежить знания перед собеседованиями) жаль что их так мало
@vladyslavanakonechna7693
@vladyslavanakonechna7693 5 лет назад
Это гениальное объяснение замыканий! И правда легонько и не навячиво. Спасибо!
@wayfarerofuntroddenpaths7571
@wayfarerofuntroddenpaths7571 5 лет назад
Спасибо Юра за твои хоть и не большие, но все таки понятные изложения. Ждем-с новые твои выпуски по JS.
@user-gz3hk1pv1p
@user-gz3hk1pv1p 4 года назад
уже дня 3 пытаюсь разобраться в этой теме, что зачем и как, а тут посмотрел данное видео, и за 15 мин понял что оно такое)) спасибо автору!) лайк однозначно!)
@DmitriyVereschagin
@DmitriyVereschagin 3 года назад
Классический случай.
@SergeSchekhovtsov
@SergeSchekhovtsov 2 года назад
Великолепное объяснение. Закрыл пробелы и всё понял с первого раза.
@Sefian
@Sefian 2 года назад
Спасибо, все гораздо проще чем мне казалось. Главное что помогли поменять, так это способы применения.
@HillelITSchool
@HillelITSchool 2 года назад
Раді, що були корисні 💙
@oleksiipetrenko3824
@oleksiipetrenko3824 5 лет назад
Юра, где же видео про асинхронность?
@AlexeyTo
@AlexeyTo 5 лет назад
Очень просто и понятно объясняется, отличное видео!
@user-et4vi6ei4z
@user-et4vi6ei4z 5 лет назад
Рок
@jenyaspace
@jenyaspace 5 лет назад
а теперь точно также но про промисы
@MrCter
@MrCter 5 лет назад
Юра, продолжайте, умоляю ))
@Dozortsev
@Dozortsev 4 года назад
Юра, ты крут! Спасибо за видео
@aktotuttttt
@aktotuttttt 4 года назад
И заслуживает лайка бро. Как же круто рассказал. Поклон, низкий, бью челом
@coltesun457
@coltesun457 4 года назад
Спасибо! Очень доступно объяснил)
@dmitrijponkin
@dmitrijponkin 5 лет назад
Круто! Спасибо за Ваш труд))
@Bunny_Love
@Bunny_Love 3 года назад
Мне пришлось несколько раз внимательно прослушать - но в итоге я все поняла! Огромное спасибо!
@dalaysalchak5073
@dalaysalchak5073 4 года назад
Толково объяснил. Спасибо!
@user-zd2zm7zv9d
@user-zd2zm7zv9d 5 лет назад
Спасибо Родной!!!! Ты лучший:))))
@40par
@40par 4 года назад
Спасибо, только теперь разобрался
@user-vk6wk8bs5m
@user-vk6wk8bs5m 2 года назад
Очень хорошее видео! Благодарю)
@disposables72
@disposables72 4 года назад
Подпишусь, может побольше будет таких мини-ликбезов. Перед сном самое то)))
@user-tk7qv9rv2c
@user-tk7qv9rv2c Год назад
Вроде и до этого понятно было, но как послушала, поняла, что только сейчас и поняла))))😁
@user-uv5qy3lq3i
@user-uv5qy3lq3i 4 года назад
Просто супер, спасибо большое)
@akkelaforest779
@akkelaforest779 2 года назад
Спасибо, очень доступно обьяснили)
@user-nm5hc6jw9f
@user-nm5hc6jw9f 3 года назад
Редко пишу комментарии, но за такое хорошее видео, грех не написать!) Спасибо вам.
@dmitryparshin4204
@dmitryparshin4204 5 лет назад
какой же милый лектор
@user-re7hx3sq2c
@user-re7hx3sq2c 5 лет назад
Можно этот пример переписать в одну строку const Counter = (count = 0) => () => ++count, но тогда не так понятно конечно, без привычки.
@alenache1
@alenache1 2 года назад
я бы сказал так: "Замыкание - это снэпшот всех доступных fункции переменных в момент ее создания"
@vitalikgorohkov1896
@vitalikgorohkov1896 2 года назад
На этом видео понял тему! спасибо за помощь
@HillelITSchool
@HillelITSchool 2 года назад
Рады, что были полезны )
@user-yv3gg4um2i
@user-yv3gg4um2i 5 лет назад
Спасибо большое !! Есть просьба сделать серию уроков ES6-7
@djoniKage
@djoniKage 5 лет назад
А я думал замыкание это что то космическое. Видите от препода многое зависить. Многие просто не умеют передавать свои знания и еще больше запутывает студента. А некоторые вот так просто человеческим языком доступно делают.
@vladvoloshenko5701
@vladvoloshenko5701 2 года назад
спасибо)
@serggey75
@serggey75 2 года назад
вот только теперь я понял замыкания) спасибо)
@HillelITSchool
@HillelITSchool 2 года назад
Раді, що стали в нагоді!
@user-lx5vv3uu8u
@user-lx5vv3uu8u 3 года назад
Спасибо!
@whatifiwant
@whatifiwant 4 года назад
2020((( а мы ещё ждём!)))
@yuriiserdiuk3918
@yuriiserdiuk3918 4 года назад
Дякую за відео , все сподобалось ))
@alexbliznec
@alexbliznec 4 года назад
2019 на дворе, а видео про асинхронность так нет(((
@CozyAvocados
@CozyAvocados 3 года назад
2020 и тоже нет(
@St3rnhunt3r
@St3rnhunt3r 3 года назад
@@CozyAvocados и в 2021 не будет(
@user-lx5vv3uu8u
@user-lx5vv3uu8u 3 года назад
Уже 2 января 2021! Ишо нЭт! )))
@XanjaevRodmam
@XanjaevRodmam 4 года назад
Бро. Спасибо Бро. Ты настроящий Бро, Бро
@user-lr8vd1cw9s
@user-lr8vd1cw9s 3 года назад
Пример с счетчиком очень полезный
@andreyzinovjev3920
@andreyzinovjev3920 3 года назад
Бен Аффлек в JS))
@saidvalc2177
@saidvalc2177 5 лет назад
мне не перезвонили
@user-kl4yk8tm2b
@user-kl4yk8tm2b 5 лет назад
Я уже раз 10 посмотрел видео про this и прототипы - обожаю его. И вот подъехал потенциальный новый фаворит.)
@fonharry9086
@fonharry9086 5 лет назад
Это какое?
@user-kl4yk8tm2b
@user-kl4yk8tm2b 5 лет назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-0vs6WkNyzec.html&list=LLeXZ31bUXjUlXgMibPcrkCw&index=18
@fonharry9086
@fonharry9086 5 лет назад
благодарю
@Hannah-ly6ff
@Hannah-ly6ff 3 года назад
спасибо!!
@PacoOfficial
@PacoOfficial 5 лет назад
супер
@alenache1
@alenache1 2 года назад
кстати, для замыкания не обязательно возвращать одну функцию из другой, можно положить ее в память любым способом, например, связать ее со слушателем событий
@user-yl3vj9ms3c
@user-yl3vj9ms3c 4 года назад
Лексическое окружение функции это не контекст того, где она объявлена. Согласно спецификации, лексическое окружение функции создается во время выполнения этой функции, а замыкание образовывается в момент создания объекта функции, при чём если создавать объект функции с помощью синтаксиса new Function, он будет ссылаться на глобальное лексическое окружение. Для создания изолированной переменной не обязательно возвращать функцию, это можно сделать так: var counter; function makeCounter() { var сount = 0; counter = function() { return ++сount; } } makeCounter(); counter(); //вернёт 1 counter(); //вернёт 2 или так: { let count = 0; function counter() { return ++count; } } counter(); //вернёт 1 counter(); //вернёт 2
@yurafedorenko1218
@yurafedorenko1218 4 года назад
да, все так, там имелось ввиду внешнее лексическое окружение, вообще эти термины часто путают, я даже делал вот тут разбор - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-HsXKiKNdeTI.html (ссылка с тайм-меткой) но это видео было бы сильно перегруженным если бы прямо в нем это разобрать(
@user-yl3vj9ms3c
@user-yl3vj9ms3c 4 года назад
@@yurafedorenko1218 Интересное видео, хотя говоря про способы вызова функций в контексте this, Вы не упомянули о стрелочных функциях, но это не столь существенно. Хотя выходит, что this зависит не только от способа вызова функции но и от ее типа. Относительно нынешнего видео, мне кажется, что прежде всего надо говорить о том, что в среде разработчиков JS существуют три определения термина "замыкание". Первое, самое верное, которое соответствует определению для всех языков программирования - замыкание это сочетание функции и её внешнего лексического окружения. Второе - это сочетание функции и свободных переменных, которые она использует. Третье - это сочетание функции и изолированных переменных, которые она использует, при чем функция может использовать изолированные переменные из нескольких лексических окружений. Иногда замыканием называют только одну из составляющих определения, то есть или саму функцию, или сами переменные или лексическое окружение.
@user-yl3vj9ms3c
@user-yl3vj9ms3c 4 года назад
Что касается первого определения, еще существует немного другая версия - замыкание это сочетание функции и её родительского лексического окружения, то есть того, в котором она была определена, но тут появляется проблема в случае синтаксиса new Function. К тому же коректнее говорить о лексическом окружении кода, в котором она была определена.
@user-yl3vj9ms3c
@user-yl3vj9ms3c 4 года назад
Теоретически второе определение тоже соответсвует определению замыкания для всех языков программирования. Можно сказать, что первое более абстрактное и основанное на спецификации, а второе более простое и основанное на практике, при чём они отличаются друг от друга, ведь свободные переменные могут находиться не только во внешнем лексическом окружении.
@user-yl3vj9ms3c
@user-yl3vj9ms3c 4 года назад
Я еще раз проверил разные определения этого термина, относительно других языков и в целом. Получается, что второе определение, то есть "сочетание функции и свободных переменных, которые она использует" и есть самым правильным. Возвращаясь к видео, то что Вы имели в виду это конечно хорошо знать, но Вы ведь сказали другое, значит ошиблись, то есть вводите людей в заблуждение. Надо бы это исправить, а то получается как-то нехорошо. Тут вот еще одно видео live.ithillel.ua/javascript-funkcii-oblasti-vidimosti-zamykanie от вашей школы с другой версией определения, насколько я понял основанной на том, что показывает браузер.
@YaroslavEx
@YaroslavEx Год назад
дякую, реально допомогло!
@HillelITSchool
@HillelITSchool Год назад
Раді, що були корисні!
@divocean4085
@divocean4085 5 лет назад
Я вот чего не понял только. Мы вызываем ту анонимную функцию, которая возвращает увеличенное значение переменной count, которое хранится в "родительской функции" Counter. Тут всё понятно, но! Допустим, мы отдельно вызовем родительскую функцию Counter, которая по идее должна обнулить переменную count (и она делает это, что показывается при дебаге), но дальнейшие вызовы анонимной функции через count() показывают, что переменная не обнулялась. Как так происходит? Новый вызов родительской Counter() создаёт новую область видимости с новой переменной, в то время как counter продолжает работать в старой со своей переменной, так получается? console.log(counter()); // 1 console.log(counter()); // 2 Counter(); console.log(counter()); // 3 console.log(counter()); // 4
@yurafedorenko1218
@yurafedorenko1218 5 лет назад
ее вызов ничего не обнуляет, ее вызов создает новую область видимости в вашем коде результат вызова Counter(); никуда не сохраняется и порожденный новый счетчик как бы теряется) я это объясняю на 4:52
@user-zd6tt5by9z
@user-zd6tt5by9z 3 года назад
@@yurafedorenko1218 повторил код на 4:10 и возвращает не цифры, а тело родительской функции. Почему так?
@yurafedorenko1218
@yurafedorenko1218 3 года назад
@@user-zd6tt5by9z ну он возращает функцию, а вот когда ее вызывать, то будут числа
@user-zd6tt5by9z
@user-zd6tt5by9z 3 года назад
@@yurafedorenko1218 а как ее правильно вызвать?
@yurafedorenko1218
@yurafedorenko1218 3 года назад
@@user-zd6tt5by9z ну типа: var firstCounter = Counter(); var secondCounter = Counter(); console.log( firstCounter() ); // 1 console.log( firstCounter() ); // 2 console.log( firstCounter() ); // 3 console.log( secondCounter() ); // 1 console.log( secondCounter() ); // 2 console.log( firstCounter() ); // 4
@santiagozarpado1145
@santiagozarpado1145 4 года назад
замыкания - интересная и иногда полезная техника, но никак не необходимая без них и туда и сюда
@grimkasad4183
@grimkasad4183 3 года назад
Фантастика, нарешті)
@artemshulga7316
@artemshulga7316 5 лет назад
Спасибо. Прочел в книге Выразительный js о замыканиях но не понял, а здесь все очень понятно.
@faizulla5838
@faizulla5838 3 года назад
почитай снова, здесь он путает.... один палец с другим.
@mariapokrasa2966
@mariapokrasa2966 5 лет назад
Лайк не глядя 🤣 Лучший учитель 👍👍👍👍
@yaroslavzef7267
@yaroslavzef7267 4 года назад
Юра, а как там дела с асинхронностью обстоят?
@ssurrokk
@ssurrokk 3 года назад
🔥
@MegaPupizoid
@MegaPupizoid Год назад
Что-то недогнал. Разные счетчики при вызове новой функции пытаются получить разные данные из одни и тех же переменных 🤔?
@aleksandrpolevyk9572
@aleksandrpolevyk9572 3 года назад
Объясняешь просто супер. Музыку приложите в описание.
@user-ee1xf7qm5d
@user-ee1xf7qm5d 4 года назад
господи, я не дабстеп слушать сюда зашел (звук на колонках), подубавьте басы
@unknown6535
@unknown6535 4 года назад
Можно сказать, что функция counter - это фабрика счётчиков, только порождает эта фабрика функции
@user-eu5jy2hc4u
@user-eu5jy2hc4u 3 года назад
👍
@jorgen5462
@jorgen5462 5 лет назад
Юра, тему промисов бы поднять) Еще requestAnimationFrame.
@miloman1995s
@miloman1995s 4 года назад
Вот функция в функции сложнее даётся , че то видимо надо пересматривать
@kirillpodolinniy309
@kirillpodolinniy309 4 года назад
На дворе уже 20-й, а про асинхронность ни слова..)
@bladerunnerz12
@bladerunnerz12 3 года назад
Или так: const makeCounter = () => { let count = 0; const foo = () => count++; return foo; }; let counter = makeCounter(); let anothercounter = makeCounter(); console.log(counter()); // 0 console.log(counter()); // 1 console.log(counter()); // 2 console.log(anothercounter()); // 0
@user-zk5ok6wn2l
@user-zk5ok6wn2l 5 лет назад
привет! выпусти урок по асинхронности пожалуйста! Ты же обещал!
@yurafedorenko1218
@yurafedorenko1218 5 лет назад
я не обещал когда оно будет, но в этом году точно)
@nursultanmuhambetov8427
@nursultanmuhambetov8427 2 года назад
var же делает переменую глобальной?
@slavkapiyavka
@slavkapiyavka 2 года назад
да, но если переменная объявленная при помощи var лежит в функции (проще говоря, в блоке кода {}), то у этой переменной область видимости становится блочной, функциональной). а вообще используйте const :)
@H1roHamada
@H1roHamada 4 года назад
Можно ли сказать, что замыкание это функция внутри функции. Как я понял это один из вариантов ответа на вопрос: "Что такое замыкание?"
@kostyafrompiter
@kostyafrompiter 4 года назад
Я бы на собесе ответил так : замыкание - это вызов функции с помощью другой функции)))))
@TinTaBraSS777
@TinTaBraSS777 4 года назад
что нельзя просто сказать что переменная а читаема функцией но не изменяема а переменная б читаема и изменяема функцией но не видима другими функциями и програмой !?
@victor-zz6xn
@victor-zz6xn 4 года назад
короче говоря, в джава скрипт замыкание это как в питоне локальные перемённые.
@azuresnake6301
@azuresnake6301 4 года назад
Никто так и не написал, что у вас в комментариях ошибка. При первом вызове она выдаст 0, а не 1. Потому что в коде используется не ++counter, a counter++
@jorgenUA
@jorgenUA 5 лет назад
посмотрел время видео - захотел диз влепить, но решил глянуть...нормально объяснил, лаконично. Функцию стрелкА, конечно не трогал, но все гглавные аспекты объяснены. Спасибо.
@user-xz1nb2ks1h
@user-xz1nb2ks1h 2 года назад
ааааа
@3bbiani
@3bbiani 5 лет назад
Несколько часов пытаюсь понять эту тему, почему в теме о замыкании на общеизвестном сайте learn.javascript.ru в примере со счетчиками нигде не объясняется, почему счетчик в случае замыкания увеличивается. Решил посмотреть видео, чтобы услышать альтернативное видение. Как результат: в данном видео тупо рассказывают сокращенную версию статьи вышеуказанного сайта, код совпадает до мельчайших подробностей, прям выдран с сайта. При этом никто даже не пытается объяснить, почему увеличивается счетчик. Так не делается. Тема не раскрыта, дизлайк.
@user-ei9bm8fq4u
@user-ei9bm8fq4u 5 лет назад
У меня наоборот. Читал на лерн.джавасрипт.ру и ничего не понял (или только частично) а вот это видео внесло полную ясность.
@3bbiani
@3bbiani 5 лет назад
@@user-ei9bm8fq4u это конечно хорошо) так почему же увеличивается счётчик, расскажи нам всем) я например уже понял, и конечно отпишусь, если непонятно кому-то)
@3bbiani
@3bbiani 5 лет назад
@Alex Reyder задайте конкретный вопрос, иначе мне не ясно, что вам непонятно
@3bbiani
@3bbiani 5 лет назад
@Alex Reyder Замыкание в моем понимании - это явление, сущность, проявляющаяся, когда функция (назовем её «внешней») возвращает в качестве значения другую функцию («внутреннюю»). В таком случая внутренняя имеет доступ к внешней по области видимости, даже после того, как внешняя прекратилась. Это говорит о том, что замыкание может запоминать и получать доступ к чтению и изменению переменных и аргументов своей внешней функции, даже после того, как та прекратит выполнение. Если на пальцах, почему увеличивается счетчик: в момент вызова (исполнения) функции Counter создается объект Lexical Environment и возвращается внутренняя функция, которая записывается в переменную counter. В этой внутренней функции есть скрытое свойство [[Scope]], которое указывает на этот объект LE внешней функции. Т.к. мы эту переменную можем использовать в любой момент, сборщик мусора не удаляет LE внешней функции. При этом доступ к этому объекту остается только у внутренней функции. Мы можем читать и изменять переменные в этом объекте, что мы и делаем. При этом, учитывая, что это объект, при чтении мы всегда будем получать текущее значение. Вот и всё)
@youxxxgun9001
@youxxxgun9001 5 лет назад
Ты, блять, слепой? После переменной стоит ++ т.е увеличивается на 1.
@dimitriy1861
@dimitriy1861 4 года назад
Да ни хрена не понятно....
@vkgorodok
@vkgorodok 4 года назад
Слабенькое объяснение. Почти 7 минут бреда.. Кто хочет понять замыкание смотрите - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-pahO5XjnfLA.html
@WikSlayer
@WikSlayer 5 лет назад
Ну зачем делать ещё одно стандартное видео по данной теме, которое повторяет информацию десятков других источников. Ничего нового. Почему бы не рассказать зачем именно нужны замыкания? Нет, не то, что было показано в видео, а действительно зачем они нужны, в первичной их сути. Почему ни слова о фунарг проблеме? Такое чувство, что автор хапнул базовых знаний и так и остался на этом видении картины замыканий. И видео лишь для галочки на канале. Буду рад ответу и объяснению, почему видео не касается этих вопросов. Если ответа не последует, тогда будет ясно, что вы не особо хорошо относитесь к своей аудитории, игнорируя подобные вопросы.
@yurafedorenko1218
@yurafedorenko1218 5 лет назад
:D
@WikSlayer
@WikSlayer 5 лет назад
Юрий, ну я серьезно, почему? Это не троллинг, не попытка задеть и прочее.
@WikSlayer
@WikSlayer 5 лет назад
В общем, ответа не будет?
@yurafedorenko1218
@yurafedorenko1218 5 лет назад
Виктор Данилов я понимаю, что это не тролинг, но я правда не знаю что ответить( ваш вопрос это претензия к автору школьного учебника по математике, что он плохо раскрыл тему интегралов. Я признаю - плохо. Но это просто такой формат, я пытаюсь простыми словами объяснять вещи так, чтоб это было понятно без специальной подготовки. А ваши пассажи насчет моего отношения к аудитории - нелепые. Мое отношение к аудитории в том, что я делаю. И вы как человек который и сам что-то снимал для ютуба можете оценить сколько сил и ресурсов здесь вложено в продакшн. И вот на этом фоне появляется человек в комментах который пишет несколько предложений и резюмирует: если не ответите то вам на всех плевать. Не надо так.
@WikSlayer
@WikSlayer 5 лет назад
Очень рад, что вы ответили. Да эти все фразы были только для того, чтобы поднять важность моего ожидания ответа. Просто предположил, что это очередной канал, в котором на комментарии не отвечают, а ответа мне очень хотелось. Извините, если что. Хорошо, условились, что это видео для начинающих. А будет ли что-то для продвинутого уровня в будущем? Просто контента для начинающих тонны просто уже. Зачем снимать то, что уже есть. Это ведь основным принципом должно быть. Просто интересно, задаётесь ли вы вопросом о том что "я только что снял то, что уже есть. Почему моё объяснение лучше, чем у других? В чём оригинальность моего видео?" И вложения сил, в первую очередь, понимаю и уважаю. Но просто если опять мусолить тему замыканий на начинающем уровне, то хотя бы сделать это.. ну как-то оригинально, что ли. Да хоть пример со счётчиком этот взять. Ну было ведь, и причём не у одного объясняющего. Поймите, я очень-очень редко оставляю комментарии, но в этот раз решил написать, чтобы просто узнать ваше мнение о вашей осознанности касательно вопроса "Зачем я создаю то, что уже есть итак? В чём ценность этого?"
@fresonn
@fresonn 5 лет назад
Народ, за что вы лижите автору? Он не раскрыл замыкания в js, он не сказал как работают функции, почему они являются объектами и тд. Он тупо процитировал learn.javascript.ru. Они даже не удосужились привести нормальный пример. Ужас..
@yurafedorenko1218
@yurafedorenko1218 5 лет назад
Vladislav Shevlyakov это такой формат когда берется тема и я пытаюсь ее объяснить по-простому, вот и всё
@fresonn
@fresonn 5 лет назад
Yura Fedoreko, ну да, а потом приходят «по-простому» такие на роботу, а там их ...
@yurafedorenko1218
@yurafedorenko1218 5 лет назад
ну по такой логике js нужно начинать учить с ассемблера, я как бы не против, но моя позиция такая: лучше разобраться в чем-то по книжке "для чайников" чем прочитать кнута и ничего не понять
@fresonn
@fresonn 5 лет назад
Лучше научится водить в gta, чем идти в автошколу и ничего не понять! И книги Кнута не совсем тут уместны 🙃
@funnyepictrailers4107
@funnyepictrailers4107 5 лет назад
Привет, не мог бы подсказать с чего начать новичку, что бы поглубже вникнуть в работу javascript и его ньюансы... Сам сейчас прохожу гайд от MDN, а после планирую почитать Фленегана
Далее
JavaScript v.2.0. Замыкания
22:58
Просмотров 43 тыс.
Whyyyy?😭 #shorts by Leisi Crazy
00:15
Просмотров 1,3 млн
Замыкания в JavaScript
18:50
Просмотров 52 тыс.