Уроки Javascript #4. Что такое замыкания в JS (простыми словами + 3 примера)

  Рет қаралды 29,440

Василий Муравьев

Василий Муравьев

3 жыл бұрын

Мой Telegram: t.me/stackdevru
В этом видео мы разберемся, что такое замыкания (Closures) в JavaScript и как они работают. Рассмотрим 3 примера использования замыканий.
Замыкания это одна из фундаментальных концепций JavaScript, которая сбивает с толку многих начинающих разработчиков JS.
Замыкание это функция у которой есть доступ к своей внешней функции по области видимости, даже после того, как внешняя функция прекратилась.
Мои Курсы:
Gatsby JS (полный курс): gatsbyjs.ru
React для начинающих: react001.ru
​Все мои курсы (+ исходные файлы): stackdev.ru
Подписывайся на соц сети:
Telegram: t.me/stackdevru
VK: vasilymur
Instagram: / vm_online
Мой блог о веб-разработке: stackdev.blog

Пікірлер: 128
@kirill-petrov
@kirill-petrov 3 жыл бұрын
Я не встречал ещё более доступного и короткого объяснения
@stackdev
@stackdev 3 жыл бұрын
Спасибо!
@user-je7lw5ey9n
@user-je7lw5ey9n 4 ай бұрын
Это магия! 12 минут меня отделяло от того, чтобы непонятное заклинание в начале видео, стало абсолютно понятным и логичным в конце
@SergioDev001
@SergioDev001 Жыл бұрын
На втором примере стало понятно 50 на 50. И тут Василий выкатывает 3-ий пример, после которого, у меня все встает на свои места. Спасибо!
@stackdev
@stackdev Жыл бұрын
:) Спасибо!
@flashback8504
@flashback8504 2 жыл бұрын
Благодаря этому видео реально понял замыкания! Большое Спасибо!!!
@stackdev
@stackdev 2 жыл бұрын
Рад что вам было полезно:)
@azamatmyktybekov6194
@azamatmyktybekov6194 Жыл бұрын
СПС ОГРОМНОЕ я час не мог понять что такое замыкание и вдруг наткнулся на ваше видео и за 12 мин понял
@stackdev
@stackdev Жыл бұрын
Спасибо)
@munarcymbatov181
@munarcymbatov181 3 жыл бұрын
Очень понятно и интересно и ещё ждём от вас REDUX👍👍👍
@mar_kha
@mar_kha Жыл бұрын
Спасибо вам большое! 🤗 Сегодня был экзамен "Программирование на JS", и в качестве доп вопроса спросили "Что знаешь про замыкание?" Ответила то, что сегодня утром, пока ехала в автобусе, просмотрела Поставили "5")
@stackdev
@stackdev Жыл бұрын
Круто) поздравляю
@user-zb1sg8ov3h
@user-zb1sg8ov3h Жыл бұрын
Предполагаю, что если писать по старокрестьянски с использованием ООП - то будет примерно вот так: class Player { score = 0 countScore() { return this.score++ } } const pl1 = new Player() const pl2 = new Player() ///И в консоли const pl1 = new Player() const pl2 = new Player() pl1.countScore() // ->0 pl1.countScore() // ->1 pl1.countScore() // ->2 pl2.countScore() // ->0 pl2.countScore() // ->1 pl2.countScore() // ->2 Что примерно является эквивалентом последнего примера.
@user-mb7kp1bl4w
@user-mb7kp1bl4w 3 жыл бұрын
Автору большое спасибо за труд! Очень доступно
@Andrei-nr2oi
@Andrei-nr2oi 3 жыл бұрын
Спасибо. Максимум полезной информации!
@user-cd1sr5sx2r
@user-cd1sr5sx2r 3 жыл бұрын
Спасибо! Хорошие примеры для объяснения замыкания.
@AlexanderShinigami
@AlexanderShinigami 2 жыл бұрын
Круто! Спасибо большое! Чем больше учу язык тем больше понимаю важность хороших, понятных и разных примеров
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@sergdonskikh2140
@sergdonskikh2140 3 жыл бұрын
Вы замечательно все рассказываете , побольше таких уроков !
@stackdev
@stackdev 3 жыл бұрын
Спасибо!
@elenasmirnova3549
@elenasmirnova3549 11 ай бұрын
спасибо, Вася!
@Lok1goD
@Lok1goD 2 жыл бұрын
Спасибо! Очень понятные примеры и объяснение на высоте, продолжай!
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@kinomir20
@kinomir20 Жыл бұрын
Отличные уроки, спасибо!
@Albert_Hall
@Albert_Hall 2 жыл бұрын
Очень приятная подача и хорошие примеры! Благодарю!
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@petelazari7994
@petelazari7994 2 жыл бұрын
prikolinii i svejii content, vsem budu recomandavati!!
@stackdev
@stackdev 2 жыл бұрын
Спасибо за поддержку!
@voodooshtv7883
@voodooshtv7883 Жыл бұрын
Понятное видео, спасибо
@user-km8kb3xj1p
@user-km8kb3xj1p 2 жыл бұрын
Хорошее, информативное видео! Спасибо за урок!
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@secondnamefifthname
@secondnamefifthname Жыл бұрын
Самое прекрасное объяснение, спасибо!
@stackdev
@stackdev Жыл бұрын
Спасибо!
@yaropolkvass6131
@yaropolkvass6131 Жыл бұрын
Господи спасибо Вам огромное за такое обьяснение. Ломал голову а тут всё настолько понятно!!! Лайк подписка!!!
@stackdev
@stackdev Жыл бұрын
Спасибо!
@yuryarakelove5322
@yuryarakelove5322 2 жыл бұрын
Великолепное объяснение замыкания
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@mountainprogrammer
@mountainprogrammer Жыл бұрын
Пожалуй, Лучшее объяснение!
@stackdev
@stackdev Жыл бұрын
Спасибо!
@syuzannanasukhova5777
@syuzannanasukhova5777 Жыл бұрын
Большое спасибо за такое грамотное разъяснение!!!)
@stackdev
@stackdev Жыл бұрын
Спасибо за поддержку!
@javascript7676
@javascript7676 2 жыл бұрын
Отличное объяснение! Василий)
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@Abubaxi
@Abubaxi Жыл бұрын
очень хорошее видео!!!! спасибо большое
@user-ch9qk3ee5n
@user-ch9qk3ee5n 2 жыл бұрын
спасибо, Василий)
@manofsteppe179
@manofsteppe179 2 жыл бұрын
Рахмет! Вы умеете объяснять сложные вещи простыми примерами. Для основы самое то, очень лаконично и взаимосвязано, не то что у других авторов даже платных курсов, коих у меня много, создают переменные от балды, во время исполнения пропадает некая логическая связка вместе с этим и желание дальше смотреть. Как же все это парадоксально. Все жду момента когда вы выпустите полноценный буткемп по js, неее неее 2-х часов мало))
@stackdev
@stackdev 2 жыл бұрын
Спасибо! как раз работаю над этим:)
@erzhan225
@erzhan225 2 жыл бұрын
Спасибо, очень понятным языком всё описано.
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@DerAleksey
@DerAleksey Жыл бұрын
ух как незаметно пролетел урок
@razvalnuy
@razvalnuy Жыл бұрын
это наверное если не ошибаюсь 3 видео если не 4-ое , и только сейчас я догнал что значит замыкание, спасибо за помощь!
@stackdev
@stackdev Жыл бұрын
Спасибо!
@user-dq7jd3yd4s
@user-dq7jd3yd4s Жыл бұрын
Спасибо, очень доступно!
@stackdev
@stackdev Жыл бұрын
Спасибо!
@therelaxingsound6903
@therelaxingsound6903 11 ай бұрын
Спасибо!!! 🤩
@crossmaxish
@crossmaxish 2 жыл бұрын
спасибо, всё шикарно 👍
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@perchinina
@perchinina Жыл бұрын
Спасибо Вам огромное за объяснение, на 0-ой минуте первый раз слышала слово "замыкание", к 8-ой могла объяснить, что это такое😌
@stackdev
@stackdev Жыл бұрын
Спасибо!
@Syberby
@Syberby Жыл бұрын
завтра без реального применения, забудешь)
@kirillguryanov4925
@kirillguryanov4925 Жыл бұрын
Спасибо, очень понятно
@stackdev
@stackdev Жыл бұрын
Спасибо!
@Maria-sm2qi
@Maria-sm2qi 2 жыл бұрын
"Замыкание - это возможность функции, которая находится внутри др функции, получать доступ к переменным, которые в области видимости родительской функции, даже после того, как родительская функция прекратила своё выполнение."
@catsapp
@catsapp 2 жыл бұрын
Или доступ к внутренней функции из вне области видимости внешней функции. При этом внутренняя функция запоминает окружающее ее область видимости
@andTutin
@andTutin Жыл бұрын
любая функция создает замыкание.
@user-ji6mp1jo4u
@user-ji6mp1jo4u Жыл бұрын
Понятно и ясно.
@stackdev
@stackdev Жыл бұрын
Спасибо
@minerinlove9338
@minerinlove9338 2 жыл бұрын
Лучший! Раза 3-4 учил, и тут прям осенило как все просто. Спасибо у Вас талант учить. Сам тренер по хоккею, не вру)!
@stackdev
@stackdev 2 жыл бұрын
:) Спасибо!
@AchtungBaby-io7zl
@AchtungBaby-io7zl Жыл бұрын
очень понятные примеры. Было б еще в конце реальное применение... Спасибо!
@andTutin
@andTutin Жыл бұрын
сокрытие реализации, кеширование и проч, но это продвинутые темы уже
@Sashad2003
@Sashad2003 Жыл бұрын
Купил урок на UDEMY и ничего не понял🤦‍♂ . Нашел ваш ролик и все стало на свои места. Спасибо!!! 😊👍
@stackdev
@stackdev Жыл бұрын
Спасибо!
@rachonak
@rachonak 3 жыл бұрын
Лайк, і підписка, всі відео супер. Більше прикладів,все дуже цікаво.
@stackdev
@stackdev 3 жыл бұрын
Спасибо!
@vaich1738
@vaich1738 2 жыл бұрын
Спасибо
@tazorprod.934
@tazorprod.934 Жыл бұрын
Видео хорошее. Чтобы лучше тему понять, как по мне, нужно ознакомиться с таким понятием как лексическое окружение
@user-qg9ji2nb8r
@user-qg9ji2nb8r 2 жыл бұрын
отлично
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@sergkuznetzov3469
@sergkuznetzov3469 3 жыл бұрын
Хороший канал!!! Так внутренняя функция берёт не только переменную,но и аргумент внешней ?
@stackdev
@stackdev 3 жыл бұрын
Спасибо! Все верно. Внутренней функции доступны переменные - которые находятся в области видимости внешней функции - включая аргументы, которые мы передаем во внешнюю функцию.
@nouchance
@nouchance 3 жыл бұрын
👍👍👍
@TeomunMete
@TeomunMete 5 ай бұрын
Классно
@user-jg5iy6zs7k
@user-jg5iy6zs7k 2 жыл бұрын
круто
@stackdev
@stackdev 2 жыл бұрын
Спасибо!
@andreybalatsan9336
@andreybalatsan9336 2 жыл бұрын
Спасибо за объяснение. Остался вопрос, а playerOne это функция высшего порядка?
@Anti-Pikaper
@Anti-Pikaper 2 жыл бұрын
Базара ноль вообще вопросов не осталось
@novichok3417
@novichok3417 3 ай бұрын
12:43 мы получили доступ не только к переменой score, но и к аргументу name . Вопрос меняется ли значение score во внешней функции или только во внутренней?
@catsapp
@catsapp 2 жыл бұрын
Вопрос. Когда *_внутренняя функция_* запоминает свое { лексическое окружение }, она запоминает все окружение или только те переменные которые использует?
@petrplotnikov4307
@petrplotnikov4307 Жыл бұрын
похоже это сильно влияет на производи тельность, что если у меня несколько переменных и много игроков, вообще это правильный подход или есть способы получше, без замыканий например?
@user-vk6wk8bs5m
@user-vk6wk8bs5m 2 жыл бұрын
Почему-то у меня на 3 минуте, когда вызываю функцию external(); она перечеркивается и пишется, что устарела. Код такой же, проверил. Не подскажите где искать причину?
@user-vk6wk8bs5m
@user-vk6wk8bs5m 2 жыл бұрын
нашел причину, когда переименовал функцию. Зарезервировано слово что-ли?
@RefuelTheRocket
@RefuelTheRocket Жыл бұрын
Правильно понимаю, что замыкание, это как шаблон, под который можно делать много экземпляров, и за счет того, что дочерняя функция не удаляется после завершения, то все работает как надо? Как например во втором примере, одна фунцкия под всех юзеров!
@nade3282
@nade3282 Жыл бұрын
в чем смысл создания замыкания в примере гражданами если мы можем написать обычную функцию и без замыкания?
@slavkapiyavka
@slavkapiyavka 2 жыл бұрын
Не понимаю, каким образом аргумент из функции addressGrazdanin (имя) встаёт на место параметра в анонимной функции?
@karoche-tv
@karoche-tv 2 жыл бұрын
Потому что когда вызов createAdress(address==type) возвращает внутри себя анонимную функцию которая возвращает address и name. И это анонимная функция записывается в переменную adressGrazhdanin. И эта переменная становится функцией и хранит в себе функцию createAdress() и Антон функцию и если вызвать её возвращает address и name. Ну типа adressGrazhdanin = function(name) { return address и name } Если просто вызвать функцию createAdress("Гражданин") то нечего не произойдёт потому что он возвращает анонимную функцию. А у анонимная не работает без имени. Поэтому как бы присваиваем в переменную чтобы использовать эту функцию.
@evand.349
@evand.349 2 жыл бұрын
При каждом запуске playerOne или playerTwo, начиная с первого запуска, должна создаваться переменная score и обнуляться согласно let score = 0; и, т.о. счётчик должен показывать всё время 1. В чём тут дело не пойму? И где мы обращаемся к внутренней функции? Мы всё время обращаемся к внешней функции createPlayer.
@stackdev
@stackdev 2 жыл бұрын
Создайте (или скопируйте) репозитоий проекта, посмотрите логи, поиграйте логикой - и все станет понятно!
@andTutin
@andTutin 2 жыл бұрын
createPlayer вызывается один раз и возвращает функцию в переменную playerOne. Другую, не createPlayer. В нашем случае это scoreCount. Поэтому вызывая playerOne, ты по сути вызываешь scoreCount (а там никакого обнуления нет, только увеличение на 1)
@user-tc6pi1nc2r
@user-tc6pi1nc2r Жыл бұрын
like
@stackdev
@stackdev Жыл бұрын
Спасибо!
@user-eh7no3me3x
@user-eh7no3me3x Жыл бұрын
некуя не понятно, but очень интересно
@MrGeorgeMS
@MrGeorgeMS Жыл бұрын
Механизм понял, но полезного применения замыкания не вижу (((
@user-qj2yg1rn3j
@user-qj2yg1rn3j 2 жыл бұрын
Благодарю, но определение я не запомню
@realmanproject7529
@realmanproject7529 2 жыл бұрын
а почему пеерменные обьявляются через конст?
@catsapp
@catsapp 2 жыл бұрын
Щас такая мода
@whatisloveel
@whatisloveel Жыл бұрын
Что это за шрифт?
@apmypa.b.291
@apmypa.b.291 26 күн бұрын
Походу все всё поняли кроме меня) Почему родительская функция неактивна? Она же запускается каждый раз, просто через функцию обёртку. А к функции внутри мы не обращаемся ни разу кроме как запуская родительскую. Я не понял тейка.
@KimarTV
@KimarTV Жыл бұрын
А зачем это нужно?
@grantorino3465
@grantorino3465 Жыл бұрын
замыкание через возврат функции из функции это просто один из частных случаев замыкания, это не его опредление. Замыкание может быть и без функции в функции. Так что обьяснение не сосем корректное.
@nefed-L
@nefed-L Жыл бұрын
А какие ещё варианты могут быть? Подобные примеры с функцией в функции везде практически, где объясняют тему замыкания.
@user-ij5vu4jn5w
@user-ij5vu4jn5w Жыл бұрын
Я не понимаю. Тут же просто присваевается то что возвращает внешняя функция канстанте, вот и все. То есть главное что у нас в ретурне. Мы бы могши на писать ретурн А и тогдабы константа содержала просто строку А.
@galievramil1169
@galievramil1169 2 жыл бұрын
Привет, если есть время и желание, можешь потестировать меня по js! Я новичок, но оч хочу программировать.. Твой урок по классам очень крутой!
@thecatwrites9731
@thecatwrites9731 2 жыл бұрын
блин крутое объяснение, но все ровно пока не понял(
@stackdev
@stackdev 2 жыл бұрын
:) а вы просто смотрели - или код за мной писали?
@thecatwrites9731
@thecatwrites9731 2 жыл бұрын
@@stackdev сейчас буду писать код) но тогда смотрел) я немного не пойму саму соль этого) я бы хотел с вами пару минут поговорить на эту тему может вы меня в правильную сторону направите)))))))))))))))
@stackdev
@stackdev 2 жыл бұрын
@@thecatwrites9731 Знаете, для меня, любое самое крутое объяснение - обязательно болжно быть дополнено написанием кода собственными руками (часто многократным...).... Без это никак. Напишите сами - без подсказок, поставьте логи - и все встанет на свои места:)
@thecatwrites9731
@thecatwrites9731 2 жыл бұрын
@@stackdev спасибо за хороший совет!!!
@bikadorov
@bikadorov 10 ай бұрын
Так и не понял, как автор вывел в консоль результат работ функций createPlayer() если нигде в коде нет команды вывода в консоль. Или мозги уже после объяснений отъехали
@frankshepherd5953
@frankshepherd5953 9 ай бұрын
он вызывал функцию прямо в консоле где > | и тут пропиши playerOne() нажми enter все получится
@whiterhino752
@whiterhino752 9 ай бұрын
Grazhdanka XD
@user-xv5bt2fy2z
@user-xv5bt2fy2z 2 жыл бұрын
переменная grazhdanin как-то не по феншую. Плохому учите.
@user-xp7zh5yr9f
@user-xp7zh5yr9f 9 ай бұрын
В JavaScript все функции являются замыканиями, но есть исключение: функции которые объявлены через синтаксис new Function().
@user-xn2cr5oe4p
@user-xn2cr5oe4p 5 ай бұрын
Непонятно объясняешь
@greykoff3325
@greykoff3325 Жыл бұрын
function outerData(){ if(oData.convert_to === "ft"){pereshetka = oData.value * 3.2808; console.log('GGGGGGGGGG',pereshetka); } return pereshetka; } Доброго ввечора есть функция - а в из нее нужно как то достать доступ до переменной в глобальную область видимости когда делаю как у Вас подсказано - console.log віводіт undefined. var pereshetka=0; oAJAX = new XMLHttpRequest(); oAJAX.open("GET","data.json", true); oAJAX.onreadystatechange = function () { var oData; //const accessToInner = outerData(); var oOutput = document.getElementById("info"); if ((oAJAX.readyState == 4) && (oAJAX.status == 200)) { var oData = JSON.parse(oAJAX.responseText); function outerData(){ if(oData.convert_to === "ft"){pereshetka = oData.value * 3.2808; console.log('GGGGGGGGGG',pereshetka); } return pereshetka; } //const result = {unit: oData.convert_to, value: convertFunction(oData.distance.value, oData.distance.unit, oData.convert_to)} { //console.log(' Hello', result); var oP; var Dlinacount = oData.distance.lenght; for (i in oData.distance ){ console.log(oData.distance[i]); console.log('HERNA', oData.distance.value); if (!oData.distance.value) { break; } else{ console.log(oData.distance) oP = document.createElement ("p"); console.log(oData.distance[i]) oP.textContent = oData.distance.unit + " " + oData.distance.value; oOutput.appendChild(oP); } } } const mygav = outerData(); console.log('HAHGAHAHAHA',mygav); } } oAJAX.send();
@yuriytheone
@yuriytheone Жыл бұрын
Только родительская функция так и останется в стеке, и не важно "работает" она или нет. Всё её локальные переменные и параметры останутся в стейке пока она не вернёт управление. Неудивительно, что внутренняя функция будет "видеть". Только в JS это вызывает дикий экстаз... Да, и Closure не переводится, как Замыкание с английского....
Замыкания в JavaScript с примерами. Фундаментальный JavaScript
22:39
Hot Ball ASMR #asmr #asmrsounds #satisfying #relaxing #satisfyingvideo
00:19
Oddly Satisfying
Рет қаралды 19 МЛН
когда достали одноклассники!
00:49
БРУНО
Рет қаралды 3,9 МЛН
狼来了的故事你们听过吗?#天使 #小丑 #超人不会飞
00:42
超人不会飞
Рет қаралды 64 МЛН
Would you like a delicious big mooncake? #shorts#Mooncake #China #Chinesefood
00:30
Что такое рекурсия. Фундаментальный JavaScript
20:32
Михаил Непомнящий
Рет қаралды 21 М.
Что такое промисы в JavaScript. Фундаментальный JavaScript
24:51
Михаил Непомнящий
Рет қаралды 41 М.
Замыкания в JavaScript | Юрий Федоренко
6:38
Hillel IT School
Рет қаралды 64 М.
Hot Ball ASMR #asmr #asmrsounds #satisfying #relaxing #satisfyingvideo
00:19
Oddly Satisfying
Рет қаралды 19 МЛН