Что такое и как работают замыкания (closures) в JavaScript?

  Рет қаралды 11,216

PurpleSchool | Anton Larichev

PurpleSchool | Anton Larichev

Күн бұрын

Детально разберёмся в работе замыканий (closures) в JavaScript на примерах. Так же посмотрим на их работу с точки зрения scope chain и стека вызовов в JS.
Это одна из лекций моего нового курса "JavaScript с нуля - основы языка и практика для начинающих".
🎉 Новый курс - Основы JavaScript: purpleschool.ru/course/javasc...
⚡ Мои курсы
Все мои курсы: purpleschool.ru
Мой telegram канал: t.me/purple_code_channel
Разделы видео:
0:00 - Введение
0:30 - Пример работы замыканий
3:58 - Пошаговая работа замыканий (call stack, scope chain)
10:45 - Как увидеть замыкание?
13:40 - Заключение

Пікірлер: 92
@PurpleSchool
@PurpleSchool Жыл бұрын
🎉 Новый курс - Основы JavaScript: purpleschool.ru/course/javascript-basics
@Leyla-kk5vo
@Leyla-kk5vo 6 ай бұрын
Вот теперь стало понятно, спасибо!
@PurpleSchool
@PurpleSchool 6 ай бұрын
Пожалуйста!
@ndrewhas
@ndrewhas 11 ай бұрын
Годно, спасибо 🔥
@PurpleSchool
@PurpleSchool 11 ай бұрын
Пожалуйста!
@mamaimdeveloper
@mamaimdeveloper 6 ай бұрын
Как же доходчиво!
@PurpleSchool
@PurpleSchool 6 ай бұрын
Спасибо
@user-bb2ho4ip8t
@user-bb2ho4ip8t 3 ай бұрын
А что здесь доходчивого? Почему в change мы можем передать аргумент хотя changeBalance, которая присваивается change не принимает аргументов, какой то трэш, здесь происходит искажение локальных областей видимости функции, нужно уточнить что в change лежит то , что возвращает функция changeBalance а не сама функция changeBalance
@Quentinrei
@Quentinrei Жыл бұрын
Крутой контент 🎉
@PurpleSchool
@PurpleSchool Жыл бұрын
Спасибо!)
@bushkov
@bushkov Жыл бұрын
О, прикольно! Как раз думал когда выйдет курс по js и вот! Уже купил.
@PurpleSchool
@PurpleSchool Жыл бұрын
👍
@bushkov
@bushkov Жыл бұрын
@@PurpleSchool Антон, подскажите, когда будет готова вторая часть курса? Я уже прошел 10% базового курса и поэтому полагаю, что смогу завершить все за 2-3 недели. Поэтому хотелось бы сразу перейти ко второй части. Или уже на этом уровне можно сразу к Typescript? Спасибо.
@DronVol
@DronVol Жыл бұрын
Я бы с удовольствием про контексты послушал, а так же про их привязку)
@PurpleSchool
@PurpleSchool Жыл бұрын
Это всё есть в курсе, может сделаю отдельное видео как-нибудь
@user-mu4my8fq2e
@user-mu4my8fq2e Жыл бұрын
Моё почтение!
@PurpleSchool
@PurpleSchool Жыл бұрын
Спасибо)
@yyanasolyah
@yyanasolyah Жыл бұрын
Спасибо за видео! Хотелось бы в будущем увидеть видео про микро и макротаски;)
@PurpleSchool
@PurpleSchool Жыл бұрын
Хорошо)
@Zadorozhniy39
@Zadorozhniy39 Жыл бұрын
Спасибо 👍🏼
@PurpleSchool
@PurpleSchool Жыл бұрын
Пожалуйста)
@CCSIB
@CCSIB Жыл бұрын
Круто, не знал. Хорошо бы практические примеры, пока придумал что можно считать сумму, среднее и кол-во, например заказов и хранить в контексте. Нужно попробовать.
@PurpleSchool
@PurpleSchool Жыл бұрын
Рад, что было полезно)
@user-ed8eb6cx7o
@user-ed8eb6cx7o Жыл бұрын
Очень полезно) есть ли у Вас видео об утечках памяти?
@PurpleSchool
@PurpleSchool Жыл бұрын
Есть анализ утечки памяти в курсе по Node.js и разбор всех инструментов: purpleschool.ru/course/nodejs
@rusfungame
@rusfungame Жыл бұрын
2 года учу js, такого обьяснения еще не встречал
@PurpleSchool
@PurpleSchool Жыл бұрын
Надеюсь полезного?)
@rusfungame
@rusfungame Жыл бұрын
@@PurpleSchool Конечно!
@raff_m_d6971
@raff_m_d6971 Жыл бұрын
Ждемс ещё
@PurpleSchool
@PurpleSchool Жыл бұрын
👍
@johnsnow6041
@johnsnow6041 Жыл бұрын
Несколько раз пересмотрел
@aidarb9318
@aidarb9318 Жыл бұрын
thanks man
@PurpleSchool
@PurpleSchool Жыл бұрын
Welcome)
@pintofale
@pintofale Жыл бұрын
Спасибо за видео! Подскажите пожалуйста - в Вашем курсе ведь нет ничего про асинхронные операции? Это будет в каком-нибудь "продвинутом" курсе?
@PurpleSchool
@PurpleSchool Жыл бұрын
Да, будет во второй части, которая продолжает первый курс.
@vit944
@vit944 Жыл бұрын
Антон, подскажите, а где на практике во фронтенде применяются замыкания?
@PurpleSchool
@PurpleSchool Жыл бұрын
Осознанно практически нигде, так как данными из замыкания напрямую нельзя управлять.
@user-jf2ui2qy1y
@user-jf2ui2qy1y 7 ай бұрын
@@PurpleSchool Супер
@diggerdog001
@diggerdog001 Жыл бұрын
Антон, я вот выбрал твой курс (я в js ноль в данный момент) как первый курс по JS и уже на первых уроках ты произносишь слова, которые новичок не может знать. Например, в разделе что такое JS, ты разбираешь где еще кроме браузера используется JS, там есть такие слова как нативные компоненты, какие то потоки (??), API, React Native, парсинг, компилирование, как будто пытаешь доказать что ты профессионал, хотя мы и так это знаем (извини если грубо написал). Для тебя понятно что эти вещи и пояснения элементарны, только не думаю что это == по отношению к новичкам. Я только начал, а уже голова начинает закипать о доп. информации которую ты не объясняешь, хотя написано что курс подходит для новичков :( Может дашь какой то совет? Может перед твоим курсом что-то другое пройти? Всё таки JS это основа основ после html/css
@PurpleSchool
@PurpleSchool Жыл бұрын
Основа основ. Я просто даю дополнительный контекст, который пока не влияет на простые концепции, которые мы разбираем. Двигайся просто медленно по урокам
@diggerdog001
@diggerdog001 Жыл бұрын
@@PurpleSchoolпонял спасибо, грубо не хотел написать. Просто хотел высказать тебе обратную связь
@asifabbasov3801
@asifabbasov3801 4 ай бұрын
Вопрос не по теме. Что за тему вы используете в VS Code?
@PurpleSchool
@PurpleSchool 4 ай бұрын
Bearded Theme Vivid Purple
@sergio_an_2003
@sergio_an_2003 Жыл бұрын
Круто! Оч информативно. А какая тема стоит в vs code?
@PurpleSchool
@PurpleSchool Жыл бұрын
Bearded Theme Vivid Purple
@user-su3ef5cb8p
@user-su3ef5cb8p 8 ай бұрын
Если бы можно было прикладывать аудио, то я бы приложил скрип своего мозга 😁 Но вроде какое то понимание появились 😀
@PurpleSchool
@PurpleSchool 8 ай бұрын
👍
@user-nj3ho3uq4h
@user-nj3ho3uq4h Жыл бұрын
Ни где нет информации. В каждом браузере есть свои кнопки переход на предыдущую страницу и обратно. Но есть такая штука как куки, при возврате куки не восстанавливаются, из-за чего ломается страница. Что делать? Сохранять историю переходов с куками?
@user-br1cz5do4c
@user-br1cz5do4c Жыл бұрын
Правильно ли я понял, что после каждого вызова запоминается пред результат и прибавляется к итоговой сумме?
@PurpleSchool
@PurpleSchool Жыл бұрын
Оно всегда храниться в связанном scope и к нему обращается
@CCSIB
@CCSIB Жыл бұрын
И надо попробовать внутри объекта vue с методами vue будет ли работать, скорее всего да.
@PurpleSchool
@PurpleSchool Жыл бұрын
Vue же это просто JS фреймворк, потому везде где есть JS работаю будет)
@valeriyosokin1076
@valeriyosokin1076 Жыл бұрын
У замыканий есть накладные расходы при создании и запуске. По сути, при создании замыкания создается объект. Не забываем что в JS функция это объект. В примере создано 2 экземпляра объекта функции. А если будет необходимо создать сотни? И как всем этим управлять?
@igorchesnokov482
@igorchesnokov482 9 ай бұрын
Ну и случится замыкание :) Только в голове :))))
@N5O1
@N5O1 Жыл бұрын
8:43 замыкания - инкапсуляция из мира JS
@PurpleSchool
@PurpleSchool Жыл бұрын
Да, но у нас есть в JS и более явные механизмы: приватные переменные, IIFE
@user-kv9ur9hi4n
@user-kv9ur9hi4n Жыл бұрын
@@PurpleSchool IIFE всегда воспринимал как костыль, сочиненный ввиду отсутствия альтернативы. Интересно ваше мнение
@PurpleSchool
@PurpleSchool Жыл бұрын
Он действительно костыль, сейчас практически не используется (кроме разовый запусков инициализации приложения, но не как инкапсуляция).
@fedordostoevskiy4209
@fedordostoevskiy4209 Жыл бұрын
Классно. Но друзья прочитайте Симпсона про замыкания. Я с третьего раза сам полностью въехал только. Там не прям уж 'wow', но ни один ролик или статья столько не дал мне.
@godlikex_alex
@godlikex_alex Жыл бұрын
название темы не подскажите?)
@PurpleSchool
@PurpleSchool Жыл бұрын
Bearded Theme Vivid Purple
@serdotsenko
@serdotsenko Жыл бұрын
я так предпологаю, что замыкания придумали до классов, т.к. по сути это класс с приватным полем, которое меняет метод этого класса 😉
@PurpleSchool
@PurpleSchool Жыл бұрын
Да, они были до классов)
@koshmar1319
@koshmar1319 Жыл бұрын
а рекурсия будет на курсе?
@PurpleSchool
@PurpleSchool Жыл бұрын
Да, в этом курсе она используется в тестах и рассматривается как пример переполнения стека.
@user-mn3ic2ct8d
@user-mn3ic2ct8d Жыл бұрын
А где все коменты?
@PurpleSchool
@PurpleSchool Жыл бұрын
Вроде все есть
@user-dr7im3tk3e
@user-dr7im3tk3e 5 ай бұрын
change это по сути changeBalance. У changeBalance нет аргументов. Каким образом аргумент переданный в change(100) передаётся в функцию и затем судя по всему передаётся в анонимную функцию вместо sum? У меня вот после просмотра видео сложилось впечатление, что замыкание - это когда одна функция возвращает другую функцию и возвращаемая функция замыкает родительскую и поэтому типа замыкание))) Механизм передачи параметров вообще не понятен.
@user-mf3gt6zs7g
@user-mf3gt6zs7g 3 ай бұрын
Ты выполняешь функцию в ченж, тем самым возвращаешь анонимную функцию с параметром и переменную баланс
@novichok3417
@novichok3417 2 ай бұрын
​@@user-mf3gt6zs7gа что будет если присвоить перем ченж функ ченжбаланс без вызова (без скобок) . А потом запустить ченж с разными параметрами три раза?
@user-mf3gt6zs7g
@user-mf3gt6zs7g 2 ай бұрын
@@novichok3417 Для тебя ничего не произойдёт. А так переменная ченж будет указывать на функцию ченжбаланс. Но ты можешь выполнить функцию ченж с двумя скобками: ченж()(100). Тогда ты по сути повторишь тот же код, что и в примере на видео. Попробуй вариант из видео и свой вариант, но выведи в консоль ченж, чтобы узнать, что в ней содержится
@novichok3417
@novichok3417 2 ай бұрын
@@user-mf3gt6zs7gи где тогда как сказать эффект накапливания? ченжбаланс()(100); ченжбаланс()(2000); ченжбаланс()(3500)); Дадут результат: 100, 2000, 3500. А не 100, 2100, 5600.
@mooncorizer290
@mooncorizer290 4 ай бұрын
Зачем называть замыканием, когда обьект с приватной переменной и методом что её меняет, помещают в переменную и пользуются его методами меняя приватное значение. Почему именно замыкание. Где можно почитать официально об этом а не в википедии
@PurpleSchool
@PurpleSchool 4 ай бұрын
developer.mozilla.org/ru/docs/Web/JavaScript/Closures
@user-glory-of-ukraine
@user-glory-of-ukraine 10 ай бұрын
Автор Ангулярщик?)
@PurpleSchool
@PurpleSchool 10 ай бұрын
Ну я писал пару лет на AngularJS, потом на Angular, потом React и Svelte. Vue больше для интереса, а не для прода.
@romanmed9035
@romanmed9035 Жыл бұрын
несомненно полезное видео. но никак не прояснило ситуацию. образно понятно, а конкретно все же еще нет. вероятно не нашел еще то объяснение котрое прольет свет на ситуацию. хотя это уже не первое видео на эту тему которое смотрю.
@PurpleSchool
@PurpleSchool Жыл бұрын
Эх, я так старался. По сути замыкание - это функция и окружение где она была создана и связь между этим.
@CJIu3eHb
@CJIu3eHb Жыл бұрын
Как дополнение, хочу акцентировать внимание именно на сборщике мусора. После выполнения порождающей функции в замыкании возвращаемой функции (ее внешнем скоупе) остается только то, что используется в возвращаемой функции, т.к. эти переменные еще понадобятся для выполнения возвращаемой функции. А то, что было только внутри порождающей и нигде больше не понадобится - после выполнения порождающей доступно для чистки сборщиком мусора. Ну и не забывать, что каждое выполнение порождающей создает новый скоуп для возвращаемой. Именно это позволяет иметь независимые балансы при создании нескольких функций changeXXX в примере видео.
@romanmed9035
@romanmed9035 Жыл бұрын
@@PurpleSchool у Вас отличное видео. и оно действительно кое что прояснило, но не до озарения. Вы не зря старались. я никоим образом ничего плохого о самом выпуске не написал. это не видео виновато, как писал не оно первое которое смотрел. и несомненно оно многим поможет у кого проще с пониманием. Ваш труд не напрасен и старания не бесполезны.
@romanmed9035
@romanmed9035 Жыл бұрын
@@CJIu3eHb премного благодарен за дополнение
@denisshulga7539
@denisshulga7539 7 ай бұрын
Ничо не понятно)
@progtime2000
@progtime2000 Жыл бұрын
Уснуть можно...
@PurpleSchool
@PurpleSchool Жыл бұрын
😴
@N5O1
@N5O1 Жыл бұрын
Это самая бесполезная информация, которую нужно знать JS\TS разработчкину. Замыкания - это инициализированные внутри функции\облати видимости переменные
@PurpleSchool
@PurpleSchool Жыл бұрын
Проблема, что многие не понимают работу замыканий и допускают ошибки при работе.
@victormog
@victormog Жыл бұрын
Слишком затянул, IMHO (тут на много проще: kzfaq.info/get/bejne/iLaled1qmK3aoJ8.html )
@PurpleSchool
@PurpleSchool Жыл бұрын
Тут не рассказана механика с точки зрения scope и привязки. Потому люди и не понимают почему так происходит
@user-kv9ur9hi4n
@user-kv9ur9hi4n Жыл бұрын
интересная логика, тебе можно пойти тогда к хауди хо, он тебе весь js за час расскажет) без обид)
@victormog
@victormog Жыл бұрын
@@user-kv9ur9hi4n логика элементарная - если видео обучающее, то где понятнее? Лично я, если бы уже не знал, не понял бы ничего...
@limonred5283
@limonred5283 Жыл бұрын
почему это выглядит как дичь?)))
@PurpleSchool
@PurpleSchool Жыл бұрын
Это JS)
Замыкания, просто и с примерами. Функции JavaScript
39:25
WebDev с нуля. Канал Алекса Лущенко
Рет қаралды 44 М.
Замыкания в JavaScript с примерами. Фундаментальный JavaScript
22:39
Каха с волосами
01:00
К-Media
Рет қаралды 6 МЛН
Barriga de grávida aconchegante? 🤔💡
00:10
Polar em português
Рет қаралды 57 МЛН
Что такое ЗАМЫКАНИЯ в JavaScript? Как они работают? Разберём на примерах
35:49
Эльбрус Буткемп: школа программирования
Рет қаралды 3,4 М.
GIT: Gitflow. Теория
9:59
Oleksiy Pototskyy
Рет қаралды 3,1 М.
Что такое рекурсия. Фундаментальный JavaScript
20:32
Михаил Непомнящий
Рет қаралды 21 М.
Замыкания в JavaScript | Юрий Федоренко
6:38
Hillel IT School
Рет қаралды 64 М.
Javascript Closure tutorial ( Closures Explained )
12:52
techsith
Рет қаралды 542 М.