Урок 3. JavaScript. Что такое замыкания. Как они работают (+ примеры)

  Переглядів 334,691

Владилен Минин

Владилен Минин

5 років тому

Получить профессию Frontend разработчика -
bit.ly/3wwxsHf
Подробнее узнать об обучении в Result School -
bit.ly/3Ooe2IU
Бесплатный курс HTML & CSS - bit.ly/430vsTK
Сделать 5 проектов на JavaScript - bit.ly/3SXpbUn
Я в соц сетях:
Telegram: t.me/js_by_vladilen
VK: vladilen.minin
Instagram: / vladilen.minin
Мои паблики по JavaScript:
Telegram: t.me/result_school_it
VK: result.school
Instagram: / result.scho. .
JavaScript cообщества:
Discord: / discord
Telegram: t.me/js_by_vladilen_chat
Roadmap по каналу:
vladilen.notion.site/Roadmap-...
Урок 3. JavaScript. Что такое замыкания. Как они работают
В видео я расскажу, как работаю замыкания.
Вы увидите 2 примера того, как их применять в Javascript
В конце ролика будет небольшая практика на замыкания и контекст
Сложный JavaScript простым языком:
• Урок 1. JavaScript. Чт...

КОМЕНТАРІ: 724
@ilgul9177
@ilgul9177 4 роки тому
Коротко, понятно + практика... Как итог - отличный урок. В общем как всегда.
@user-ls3id2kz3o
@user-ls3id2kz3o 2 роки тому
стоило сказать, что apply или call можно было использовать при написании кастомного bind )) в остальном отличное видео
@some_user1337
@some_user1337 4 роки тому
Отдельное спасибо за примеры использования, не всегда понятно где и как реализовать ту, или иную особенность. 👍
@prometheusmusic4559
@prometheusmusic4559 4 роки тому
Вот +++
@antontuchkin9396
@antontuchkin9396 4 роки тому
Огромное спасибо за такой ценный free материал! Есть маленькая просьба, для таких новичков как я, было бы очень ценно понимать в каких случаях применять полученные знания. Пара примеров из реальной жизни.
@user-vp1pu1pz6m
@user-vp1pu1pz6m 6 місяців тому
там как раз и были наведены примеры из реальной жизни, например urlGenerator
@arseeq
@arseeq 3 роки тому
Это талант так легко и просто объяснять вещи. Спасибо!
@vadimtregubenko5749
@vadimtregubenko5749 3 роки тому
Что-то я не совсем понял. Каким образом заполняется параметр с массивом ...args в замыкании? В bind передается контекст ( объекты ) и функция. А дальше как замыкающая получает параметры ?
@indigosay
@indigosay 4 роки тому
Автор объяснил понятнее за 11 минут, чем Кантор, которого я полдня читал и не понял до конца!
@ignatmv.8654
@ignatmv.8654 4 роки тому
Кантор в новой редакции совсем не сахар.
@ihorpopovskyi4862
@ihorpopovskyi4862 4 роки тому
Там такая дичь. Так сложно написано(
@indigosay
@indigosay 4 роки тому
@@ihorpopovskyi4862 это по-началу сложно, просто каждый день читай статьи, гугли и ютубь, ну и пробуй свой код писать и смотри что происходит. Со временём мозг сам поймёт чо-как, будешь к этому хладнокровно относиться и молча делать всё правильно и без эмоций.
@ihorpopovskyi4862
@ihorpopovskyi4862 4 роки тому
@@indigosay Ты не понял, я конкретно про эту тему, а в основном там гораздо проще чем на MDN, например)
@user-rz1bn3gl7q
@user-rz1bn3gl7q 4 роки тому
@@ihorpopovskyi4862 на MDN сухая инфа чисто повторить то, что ты чуть-чуть позабыл,. имхо
@zerocool14pvo
@zerocool14pvo 5 років тому
Красавчик, видео одно за другим!
@VladilenMinin
@VladilenMinin 5 років тому
Главное не сбавлять темп)
@grangeld
@grangeld 3 роки тому
Огромное Спасибо! я понял наконец-то что такое замыкание. Надеюсь ты продолжишь снимать ролики, они отличные!!!
@CHEloveg22
@CHEloveg22 4 роки тому
Самое доступное объяснение. Спасибо большое за труд!
@lumeaceaiuluisrl6343
@lumeaceaiuluisrl6343 3 роки тому
На самом деле, Вы большой молодец, Владилен)) Спасибо!
@VladilenMinin
@VladilenMinin 5 років тому
Смогли сами реализовать bind? Как вам идея с практикой в конце?)
@NVsquare
@NVsquare 5 років тому
Если уж и писать свой байнд, то и эплай тогда тоже надо было свой )
@VladilenMinin
@VladilenMinin 5 років тому
@@NVsquare Без него никак)
@andreyopanasenko8771
@andreyopanasenko8771 5 років тому
Отличный урок! А можно же в возвращаемой функции не использовать Rest, а в apply() сразу передавать arguments?
@VladilenMinin
@VladilenMinin 5 років тому
@@andreyopanasenko8771 Лучше Array.from(arguments)
@gegrbydfcz
@gegrbydfcz 5 років тому
Спасибо за урок! У меня не получилось передать дополнительные параметры в функцию bind, которые передаются массивом args. В console.log выводится undefined вместо передаваемого параметра. Получается примерно такой вывод "Person: Михаил, 22, Frontend, undefined" Можете ли подробнее объяснить как использовать доп параметры?
@tylerdurden9008
@tylerdurden9008 2 місяці тому
Очень хорошо! Исчерпывающая информацию + сразу же можно выполнить самостоятельное задание и тут же его проверить. Большое спасибо автору, за возможность подтянуть свои знания!
@user-il9nt4hl8u
@user-il9nt4hl8u 3 роки тому
Спасибо за видео! До момента, когда откуда-то появились ARGS было все понятно.
@user-yx4ov2xx8s
@user-yx4ov2xx8s 4 роки тому
Спасибо большое за этот плейлист! 👍👍😊
@unheilbar
@unheilbar 4 роки тому
Ваш контент из русскоязычного один из лучших, что я видел/читал.
@VladilenMinin
@VladilenMinin 4 роки тому
Благодарю)
@gelosx1
@gelosx1 3 роки тому
Владилен, спасибо за классный контент - подача и материал, всё на очень высоком уровне. В некоторых комментариях здесь утверждается, что в видео идет речь о функциях высшего порядка а не о замыканиях. То что это функция высшего порядка, не отменяет тот факт , что здесь также присутствует замыкание: 1. Так как для функции внешним окружением является место, где она была объявлена, а не место где она была вызвана, то в нашем случае анонимная функция которую мы возвращаем как результат выполнения функции bind,получит в качестве ссылки на внешнее лексическое окружение, ссылку на лексическое окружение самой функции bind. При этом, эти ссылки сохраняются в так называемой куче(heap), что позволяет им, в отличии от непосредственно самой функции, выполняющейся в стеке и удаляющейся оттуда сразу после того как функция завершит свою работу, оставаться в памяти до удаления сборщиком мусора. 2. К лексическому окружению функции относятся не только ее параметры, но и аргументы. Поэтому, в нашем случае и context и fn также входят в лексическое окружение функции bind. Теперь, если: const func = bind(person1,LogPerson) то : при вызове func(), произойдет следующее: для получения context и fn функция сначала обратиться к своему лексическому окружению, так как их там нет, то она по имеющейся у неё ссылке начнёт поиск в лексическом окружении внешней функции, где она была объявлена, именно этот момент и есть замыкание. Вот мои два варианта решения задачи: Для чистоты эксперимента, сделал функционал как у оригинального bind, без явного добавления функции в параметры и чтоб совсем все было своим, функцию apply также сделал кастомной: _________________________________________________________________________ Object.prototype.myApply = function (context,args) { if(!Array.isArray(args)) throw new Error('parameter is not Array'); const tempContext = {...context, appliedFunc: this}; tempContext.appliedFunc(...args) }; Object.prototype.myBind = function (context,...args) { const boundFunc = this; return function () { boundFunc.myApply(context,args) } }; logPerson.myBind(person1)() _________________________________________________________________________ Или другой вариант, наиболее оптимальный, объединяющий эти две функции: _________________________________________________________________________ Object.prototype.myBind2 = function (context,...args) { const tempContext = {...context, boundFunc: this}; return function () { tempContext.boundFunc(...args) } } logPerson.myBind(person2)() _________________________________________________________________________
@Icmana
@Icmana Рік тому
------------- Базовая функция ------------ logPerson.bind (p1)( ) вывод: Person: M, 22 this: {name: 'M', age: '22'} age: "22" name: "M" [[Prototype]]: Object ------------- Ваш пример ------------ logPerson.myBind2 (p1)( ) вывод: Person: M, 22 this: {name: 'M', age: '22', boundFunc: ƒ} age: "22" boundFunc: ƒ logPerson() name: "M" [[Prototype]]: Object ------------- Мой вариант я без аргументов делал, но добавить их не сложно ------------ bind (p1, logPerson)( ) вывод: Person: M, 22 this: {f: ƒ} f: ƒ logPerson() [[Prototype]]: Object age: "22" name: "M" [[Prototype]]: Object Реализация, тоже думал что apply и call пользовать не положено function bind(obj, func) { const nobj = {f: func}; Object.setPrototypeOf(nobj, obj); return (function() {nobj.f()}); } А вот так легко call можно сделать function bind(obj, func) { const nObj = {f: func}; Object.setPrototypeOf(nObj, obj); nObj.f(); }
@igordudin289
@igordudin289 4 роки тому
Большое Вам спасибо за такое подробное и простое объяснение!
@user-ox8ni9oz2p
@user-ox8ni9oz2p 2 роки тому
Кайф! Тяжело найти в инете такое понятное объяснение. Спасибо!
@user-fw4ew8wf3b
@user-fw4ew8wf3b 2 роки тому
Исходные данные задачи в конце ролика: function logPerson() { // console.log(`Person: ${this.name}, ${this.age}, ${this.job}`) // } // const person1 = {name: 'Михаил', age: 22, job: 'Frontend'} // const person2 = {name: 'Елена', age: 19, job: 'SMM'} // bind(person1, logPerson) // bind(person2, logPerson)
@khoth1988
@khoth1988 Рік тому
Нечитабельная срань же.
@Ghost15NG
@Ghost15NG Рік тому
@@khoth1988 что тебе нечитабельно? условия задачи, которые достаточно скопировать и использовать для решения?
@khoth1988
@khoth1988 Рік тому
@@Ghost15NG замыкания.
@alexispell4251
@alexispell4251 4 роки тому
Не скажу ничего нового... Ты просто великолепен) Даешь окрепнуть в понимании нативного js так, как не делают другие и близко... На очереди приобретение курса по Node. Спасибо за все твои труды
@dmitriyshisterov8400
@dmitriyshisterov8400 3 роки тому
Чувак, огромная благодарность!) Великолепно объясняешь!
@user-lw3qt4zb6p
@user-lw3qt4zb6p 4 роки тому
Ты лучший. Наконец стал понятен смысл замыканий
@ns-br9zw
@ns-br9zw 4 роки тому
Замечательное объяснение. Спасибо!
@kostasancez2358
@kostasancez2358 5 років тому
Ещё интересно было бы про AJAX, c практикой, короче скоро это будет топовый канал на ютубе с годными уроками по фронту))
@Andreikatm
@Andreikatm 4 роки тому
XMLHttpRequest (XHR), AJAX, REST и тд жду!!!
@roman--s
@roman--s 4 роки тому
В моде FETCH , Socket.io. REST API да, нужная штука.
@dizelvinable
@dizelvinable 3 роки тому
В конце блоки со ссылками на другие видео перекрывают экран и не видно кода.
@olegonkos
@olegonkos 3 роки тому
чувак, ты же хочешь стать разработчиком. Возьми и тупо отключи рекламные блоки в панели разработчика.
@dizelvinable
@dizelvinable 3 роки тому
@@olegonkos спасибо, чувак
@itrisia
@itrisia 3 роки тому
@@olegonkos лучше поздно, чем никогда
@materna432
@materna432 3 роки тому
@@olegonkos Это только до тих пор пока не перезагрузить страницу. Ну или селектор вкинуть в фильтры addblock
@materna432
@materna432 3 роки тому
##.ytp-ce-element - да вот такой фильтр нужно добавить в addBliock и он сам зарежит эти рекомендации
@user-pk2rw1li2q
@user-pk2rw1li2q 3 роки тому
Премию оскар за лучшее русскоязычное объяснение javascripta )
@vyacheslavvasilev1776
@vyacheslavvasilev1776 Рік тому
Действительно простым языком. Спасибо за материал, помогли разобраться!
@user-ku2sn1wz1c
@user-ku2sn1wz1c 2 роки тому
Лучший способ научить - самый простой! Спасибо, переплюнул 90% инфы на эту темую
@alik64
@alik64 2 роки тому
я наконец-то понял, что такое замыкание , спасибо тебе огромное 🚀
@vazgenaleksanyan2929
@vazgenaleksanyan2929 4 роки тому
круто все. Было здорово посмотреть твой урок по созданию JAVASCRIPT плагина.
@user-be8yr8lh8z
@user-be8yr8lh8z 4 роки тому
Отличный контент, спасибо большое)))
@alextopsite
@alextopsite Рік тому
Лучшее объяснение замыканий в JavaScript, что я слышал
@XenonGamesChannel
@XenonGamesChannel 3 місяці тому
Лаконично!!👍👍👍 без воды и с реальными примерами
@user-zp8xz5fu2j
@user-zp8xz5fu2j 4 роки тому
О боги,я понял это спустя неделю попыток и тонны лит-ры и видео) Прикладные примеры - самое важное,за это отдельное спасибо!
@user-zp8xz5fu2j
@user-zp8xz5fu2j 3 роки тому
@@ne4to777 Почему ты так уверен?)
@user-zp8xz5fu2j
@user-zp8xz5fu2j 3 роки тому
@@ne4to777 Ну не в развернутой форме, очевидно (формат не подразумевает) Но все же, базовое понимание видео дало
@Aaaa-jn4bm
@Aaaa-jn4bm 2 роки тому
Мне кажется что в этом видео пропустили самый главный момент, без которого замыканий не существовало бы - вы пропустили момент создания лексического окружения, которое выполняется каждый раз при вызове функции
@crn05
@crn05 Рік тому
наверное чтобы не усложнять и так сложную тему.
@denishaleckiy8303
@denishaleckiy8303 Рік тому
@@crn05 это центральный момент, на котором все работает... буквально, кроме этого ничего нет
@Leo-ke3hv
@Leo-ke3hv 4 роки тому
объясняешь великолепно
@user-ts4pq8mh7u
@user-ts4pq8mh7u 4 роки тому
Хочу сказать что твой контент очень крутой! Наконец то не тот контекст как объявлять и складывать переменные а именно то что нужно.
@alekseygaikevich4195
@alekseygaikevich4195 4 роки тому
Спасибо) отличное объяснение!!
@user-co3kd1ej7o
@user-co3kd1ej7o 4 роки тому
я вот просто, благодарен за твои уроки!!!!!!!!!!!
@unknown.6914
@unknown.6914 Рік тому
прекрасный урок, спасибо 😊
@user-nw3nt9kq6m
@user-nw3nt9kq6m 3 роки тому
Спасибо тебе, Ленин, ты крут!
@hasst9261
@hasst9261 4 роки тому
Спасибо за уроки, отличное качество.
@VladilenMinin
@VladilenMinin 4 роки тому
Благодарю за отзыв) Ознакомься с другими роликами на канале
@hasst9261
@hasst9261 4 роки тому
@@VladilenMinin Я знаком, спасибо и буду знакомиться дальше). Удачи в делах!
@malina5639
@malina5639 2 роки тому
Браво! Все супер понятно! Спасибо!
@user-vd9yw5ez3e
@user-vd9yw5ez3e 4 роки тому
Владлен, у тебя ахрененный канал. Побольше бы таких))
@VladilenMinin
@VladilenMinin 4 роки тому
Благодарю)
@KuKu_RuKu88
@KuKu_RuKu88 4 роки тому
ОЧЕНЬ ХОРОШО ОБЪЯСНИЛИ. СПАСИБО
@BrainOverflow-eof
@BrainOverflow-eof 2 роки тому
Спасибо, это лучшее объяснение.
@VladimirDevyatoff
@VladimirDevyatoff 4 роки тому
Довольно простая тема, если по человечески её объснить) Спасибо, наконец-то понял на 100%
@VladimirDevyatoff
@VladimirDevyatoff 3 роки тому
@@ne4to777 это когда функция получила внешнюю переменную и забыла про внешнюю)
@VladimirDevyatoff
@VladimirDevyatoff 3 роки тому
@@ne4to777 ага. работает с ней как с копией)
@user-yk9nj6co9d
@user-yk9nj6co9d Рік тому
Всё ясно и понятно. Спасибо.
@_akunin3674
@_akunin3674 3 роки тому
Отличный контенет. Спасибо
@user-eh1nj8el9l
@user-eh1nj8el9l 2 роки тому
Шикарная информация!
@user-bu4lx9ox9z
@user-bu4lx9ox9z Рік тому
Спасибо за хорошее объяснение.)
@iznu3
@iznu3 3 роки тому
Спасибо за видео!
@genykm
@genykm 4 роки тому
А почему ни слова об областях видимости переменных во вложеных функциях? Мне кажется это тоже важно в данном контексте.
@andTutin
@andTutin 2 роки тому
а что там поменялось ?
@GoPro-ts5sh
@GoPro-ts5sh 2 роки тому
@@andTutin var задизили, стрессует
@epic3386
@epic3386 Рік тому
а об этом ты узнаешь если купишь курс! и там тебе дадут новое видео где раскроют твой вопрос, но не скажут ещё о чем-нибудь, об этом тебе расскажут уже в следующих купленных видео )) и так до тех пор пока ты не поумнеешь и не начнёшь читать книги по js'у))
@genykm
@genykm Рік тому
@@epic3386 уже работаю в Оракле, так-что не актуально )
@epic3386
@epic3386 Рік тому
Мои искренние поздравления )) видимо начал читать книжки?))
@IhorVyshniakov
@IhorVyshniakov 3 роки тому
Спасибо за данный плейлист, его ценность сложно переоценить, БЛАГОДАРЮ!!! Идея с задачками в конце просто отличная) Т к не хватало практики. БУДУ РАД ЕСЛИ КТО-ТО МНЕ ОБЬЯСНИТ ЗАЧЕМ В ЗАДАЧКЕ ВООБЩЕ ...args =) Только вот я не понимаю зачем в конечной задачке вообще замыкание и какие еще параметры вы собираетесь туда передавать, этого в условии задачи не было. Можно просто вот так сделать и так же будет все работать: function bind(context, fn) { return fn.apply(context) } bind(person1, logPerson) bind(person2, logPerson) Поэтому необходимости и смысла использования замыкания в данном примере к сожалению я не увидел, хотя хотелось применить как-то это знание. А тут по сути просто мы воспользовались альтернативой .bind(), вместо того, чтобы написать свою функцию. ИМХО.
@YourBrain-vc3bh
@YourBrain-vc3bh 8 місяців тому
тоже не поняла зачем args нужен
@user-nw3nt9kq6m
@user-nw3nt9kq6m 3 роки тому
Комментарий из восьми слов для поддержки этого видео.
@razumizm
@razumizm 4 роки тому
10:50 Оператор Rest, а не Spread в данном случае. Spread используется для разделения коллекций на отдельные элементы, а rest, наоборот, для соединения отдельных значений в массив.
@zeNoldor
@zeNoldor Рік тому
Огромное спасибо! Шедевральное обьяснение с примерами. Как минимум, можно будет обьяснить на собеседовании принцип работы или написать самому, а не пытатьсчя заучивать непонятные словешки)))
@romko-romario
@romko-romario 3 роки тому
Очередное видео на данном канале, которое было для меня невероятно полезным :) Плейлист "Сложный JavaScript простым языком" - лучшие материалы по JS из мной увиденных, в очередной раз хочу выразить благодарность автору! 9:33 Что касается задания с функцией bind, вот моё решение (в одну строчку): const bind = (obj, funct) => funct.bind(obj); Или же: function bind(obj, funct) { return funct.bind(obj); } P.S. Я не уверен на сто процентов, верное ли это решение (если оно в чём-то ошибочно, поправьте меня, кто знает лучше), но проверял с такими же объектами person, как и в примере, с функциями, которые принимают от 0 до 3 аргументов, и всё работает. UPD: нет, не всё! Функция bind должна быть каррируемой, тоесть должна уметь принимать аргументы как в первых скобках, так и во вторых. Посмотрите видео, которое автор рекомендует в комментарии к данному комментарию, там он всё объясняет идеально понятно.
@VladilenMinin
@VladilenMinin 3 роки тому
Глянь на канале подробный разбор bind 4 способа
@GothBoxBoy
@GothBoxBoy 5 місяців тому
Думаю что код написан правильно т.к. дело не в принимаемых аргументах, нет. Стрелочные ф-ции как и каррируемые могут создавать замыкание, они все же имеют доступ к содержимому родителя (по научному "лексическому окружению родителя"). Замыкание и каррирование - это разные вещи. Карррируемые ф-ции в отличии от стрелочных преобразуют ф-ции с множеством аргументов в последовательность ф-ций с одним аргументом. И спасибо за коммент, узнал что есть каррируемые ф-ции)👍
@RewCSharp
@RewCSharp 4 місяці тому
Спасибо за урок!
@viktorpoliushko2015
@viktorpoliushko2015 4 роки тому
Сколько уже слов было сказано об этом канале, но я не поленюсь и тоже напишу. Очень лаконично и четко, все по полочкам без воды, спасибо за труды. Привіт з України!
@VladilenMinin
@VladilenMinin 4 роки тому
Привет с Шри-Ланки)
@myroadmalankajosef9192
@myroadmalankajosef9192 9 місяців тому
та ну нахуй тебе занесло!))) а що там на Шрі Ланці??? Країна третього світу!!! Я б зрозумів, аби ти із Ліхтенштейну привіт передавав, або із Швейцарії)@@VladilenMinin
@olesilin3011
@olesilin3011 Рік тому
Примеры и задачи должны решаться с замыканием проще и изящней, чем без него. Иначе вопрос "зачем" остается не раскрыт. А по механике все очень доходчиво.
@wawawf
@wawawf 5 років тому
годнота!
@alira2924
@alira2924 4 роки тому
Спасибо за урок
@anastasijavvo
@anastasijavvo Рік тому
спасибище, реально все четко и понятно!
@Max-kr4ie
@Max-kr4ie 4 роки тому
Очень годно))
@DrZlad
@DrZlad 2 роки тому
Большое спасибо Автору за: показал зачем оно в практическом смысле надо. А то остальные только счетчик показывают и всё
@renat_mg6881
@renat_mg6881 3 роки тому
Отличный урок!
@pitbrest
@pitbrest 2 роки тому
Как уже писал кто-то ранее, первые два ролика прям доходчиво, тут пример в конце выбивает из колеи понимания.
@Woody_Johnson
@Woody_Johnson 2 роки тому
Спасибо большое за объяснение! Но всё же не совсем понятно, зачем в данном случае нужно замыкание. Можно ведь в рамках одной функции всё сделать: function bind(context, fn) { return fn.call(context) } Какой практический смысл здесь в замыкании?
@lemmesolo
@lemmesolo Рік тому
там даже return не нужен
@cleardoc7554
@cleardoc7554 Рік тому
тогда ведь теряется смысл, который заложен в оригинальный bind: сначала указывается контекст, затем вызывается. Собственно, замыкание в этом случае и служит как раз для "отложенного" вызова.
@eurorock5912
@eurorock5912 4 роки тому
Владилен, снимаю шляпу!) Прекрасно объясняешь теперь. Не то, что в курсах платных (если честно, не понимаю почему), может просто опыт преподавания растёт))) Так держать! То же и про .bind и .call.
@Max-kr4ie
@Max-kr4ie 4 роки тому
Опыт да. Владлен норм так начал рассказывать. И по делу и голос приятен.
@harrypolygon
@harrypolygon 4 роки тому
Хз по моему платные курсы у него тоже отличные
@stanislavmalyshev5209
@stanislavmalyshev5209 2 роки тому
Вообще лучшее объяснение!
@paveltk3092
@paveltk3092 4 роки тому
замыкание - функция внутри функции и все! гениально
@zxspectrum3352
@zxspectrum3352 4 роки тому
Нет не все ибо замыкается область видимости родительской ф-ции, в этом и весь смысл, а не просто "функция в функции" и дочерняя ф-ция сохраняет доступ к этой видимости (переменным родительской ф-ции).
@bukanaka
@bukanaka 2 роки тому
@@zxspectrum3352 Именно так. А утверждение замыкание это вызов функции в функции не верно
@sekirogenshiro2210
@sekirogenshiro2210 4 роки тому
офигенный урок
@user-vs6bg3xn5s
@user-vs6bg3xn5s 3 роки тому
Ты лучший фронтенд блогер. И я могу обосновать это. Во-первых: за такой короткий промежуток времени ты создал огромный канал с исчерпывающей информацией по фронтенд разработке. Во-вторых: любой человек с желанием может просто внимательно смотря твои видео по порядку и выполняя вместе с тобой задачи научиться всему за кратчайшие сроки. Все это благодаря структурированности и продуманности каждого плейлиста и видео. Я боюсь представить скольких усилий это все тебе стоило. В-третьих: все видео без лишней воды, и неуместных рофлов. В-четвертых: на этом канале я не увидел ни одного видео ради видео, каждое видео отличается от другого и раскрывает разные темы. В-пятых: четкая дикция, отлично выступаешь на камеру. Ты на верном пути братан, продолжай
@VladilenMinin
@VladilenMinin 3 роки тому
Благодарю за такой отзыв, мне очень приятно)
@user-rr2nw7if7u
@user-rr2nw7if7u 4 роки тому
Годнота :))))
@Abdul-hy4cy
@Abdul-hy4cy 2 роки тому
Спасибо. С 4-ого раза просмотра видео, мне всё же удалось, самому написать функцию bind работающую.
@VladilenMinin
@VladilenMinin 2 роки тому
На канале есть подробный ролик про его создание)
@romasbitinas643
@romasbitinas643 Рік тому
Спасибо вам за видео
@andreyrudin2286
@andreyrudin2286 4 роки тому
но в целом очень нравится, у Вас реально талант объяснять простым языком. Этого сейчас очень мало на ютубе, одно бла бла бла, я понимаю что русский язык позволяет заниматься разглагольствованием, но хочется максимум понятной информации за минимальное время, у Вас пока по тем видео которым я смотрел все так, т.е. можно джуниоров натаскивать по Вашим видео :) все всё поймут. Спасибо еще раз.
@VladilenMinin
@VladilenMinin 4 роки тому
Благодарю за отзыв Дело не в языке, а в понимании и умении Те, кто льют воду сами плохо разбираются
@bobmagrega
@bobmagrega Рік тому
Спасибо. Именно у вас понял.
@user-dl2lm7ju2y
@user-dl2lm7ju2y 3 роки тому
понял. Спасибо!
@hasst9261
@hasst9261 4 роки тому
Контентище!
@user-vu9pp3bm8f
@user-vu9pp3bm8f 4 роки тому
Супер!!!
@littlepony7160
@littlepony7160 Рік тому
Страшная тема для соло-обучения в онлайн-учебниках. В статье со скопом из "контекста", "лексического окружения" и "сборщика мусора" - можно впасть в депрессию. Напоминает мене, как меня в колледже учили "что такое транзистор" в течении целого года + курсовая по ним. Ну и тот самый страх, при мысли того, что тебе когда-то придётся его использовать. Так сильно заваливать информацией, когда это можно обьяснить так просто. Спасибо за ваш ролик. Какой же всё-таки талант - уметь обьяснять вещи просто.
@sasharudenko5446
@sasharudenko5446 4 роки тому
я что-то не вкурил про аргументы. они ведь не передаются. откуда они появляются ? а с учетом первичного задания, все вообще сводится до fn.apply(context)()
@user-ql4xu5qu2u
@user-ql4xu5qu2u 4 роки тому
Там не аргументы появились, а поля объекта из контекста. Я так понял параметры функция принимает, потому что спроектирована с запасом на разные ситуации.
@tentacle8148
@tentacle8148 3 роки тому
Они появляются от rest params
@AsVit
@AsVit 4 роки тому
Спасибо!
@vladvdovychenko6506
@vladvdovychenko6506 Рік тому
Спасибо большое за урок. Только есть вопрос про последнее действие. Понятно что метод apply() должен обязательно иметь два параметра, но что имеется ввиду под массивом ...args ? не понял зачем нужно передавать внутри второй функции ещё какие-то параметры, если функция bind требует только обьект для контекста (person) и саму функцию вывода (logPerson) информации в консоли ?
@ravabat5841
@ravabat5841 4 роки тому
Блестящщще)
@QaZaQ_Stranger
@QaZaQ_Stranger 5 місяців тому
Кто-то пишет ,что сложно и не понятно😂 но по мне это самое крутое обьяснение замыкания которое я видел
@ugolblab6940
@ugolblab6940 3 роки тому
Добрый день, подскажет пожалуйста, а вложеная фукция ведь может быть стрелочной? И если да то будет ли она работать так же как и с обычным декларированием? И нет ли каких-то подводных камней с использованием this в обоих случаях. Спасибо
@juriskrumgolds5810
@juriskrumgolds5810 3 роки тому
Самое интересное в замыканиях то, что я как-то всегда боялся этого слова, казалось что это какой-то хитровыдуманный и сложный программистский концепт. А когда понял что это такое, оказалось я сам неоднократно использовал его в своем коде даже не подозревая, чисто на интуитивном уровне.
@crn05
@crn05 Рік тому
такое часто бывает, пользуешься чем-то, а оказывается у этого страшное название есть
@yury497
@yury497 10 місяців тому
На мой взгляд стоило сделать немного иначе. function bind(fn) { return function(context) { fn.apply(context) } } const personData = bind(logPerson) Получили функцию, возвращающую данные любого человека.
@user857ho8t
@user857ho8t 11 місяців тому
четко объяснил, спс
@EugenHV
@EugenHV 5 років тому
Хотелось бы увидеть от тебя про прототипное наследование (prototype) и про функции конструкторы (new)
@VladilenMinin
@VladilenMinin 5 років тому
Про само прототипированное наследование не особо вижу смысла писать, тк это практически не встречается уже за счет ES6
@tyortyo
@tyortyo 4 роки тому
Владилен, спасибо. Я вот одно не пойму, зачем bind в методах классов, если метод вызван через this. Почему контекст может потеряться?
@elvir.bekirov
@elvir.bekirov 10 місяців тому
Спасибо за доходчивое объяснение замыканий. PS: интересно что когда я начал вбивать пример с bind в VSCode Copilot сразу подставил весь код с правильным ответом включая пример использования. Видимо где-то в открытом коде AI уже его запомнил )
@user-ql3ls2tz9n
@user-ql3ls2tz9n 3 роки тому
Здравствуйте) Все очень круто и интересно, но я столкнулась с такой проблемой: на странице в браузере, в консоли выводятся только ошибки, а мой редактор (Brackets) ругается на rest, то есть правильный код просто не проигрывается, хотя js файл подключен правильно, проблема не в этом. Синтаксических ошибок тоже нет. Можете подсказать пожалуйста, в чем дело может быть?
@siu1941
@siu1941 Рік тому
спасибо за обьяснение. Но хотел бы узнать какой у тебя ноутбук? Так как хочу купить себе новый, потому что мой уже начинает гнать
@protasov-by
@protasov-by 3 роки тому
а можно не сразу return делать а передать параметр проверить его и в зависимости от условия сделать либо такой либо иной return? грубо говоря взять if/else блок и возвращать функцию?
@avakarchuk
@avakarchuk 9 місяців тому
Спасибо! Наконец Я понял замыкание полностью 😂
Урок 4. JavaScript. Асинхронность.Что такое Event Loop. JS SetTimeout 0
17:58
Что такое и как работают замыкания (closures) в JavaScript?
13:55
PurpleSchool | Anton Larichev
Переглядів 11 тис.
😨Новая Война в GTA 5 Online #shorts
00:40
King Dm
Переглядів 1,7 млн
Урок 17. JavaScript. Все о LocalStorage
16:39
Владилен Минин
Переглядів 147 тис.
Про  __proto__ и prototype на практике
31:44
LN Master
Переглядів 4,9 тис.
Замыкания, просто и с примерами. Функции JavaScript
39:25
WebDev с нуля. Канал Алекса Лущенко
Переглядів 44 тис.
РАБОТАЙ МЕНЬШЕ: Как достичь цели за 2-4 часа в день
21:18
Будущие работы: какие навыки будут востребованы
32:53
FRONTEND: Мифы и Реалии рынка труда
34:43
Владилен Минин
Переглядів 39 тис.
prototype и __proto__ / JavaScript для собеседований 01
34:07
Замыкания в JavaScript с примерами. Фундаментальный JavaScript
22:39