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

  Рет қаралды 334,863

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

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

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
@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 сухая инфа чисто повторить то, что ты чуть-чуть позабыл,. имхо
@user-ls3id2kz3o
@user-ls3id2kz3o 2 жыл бұрын
стоило сказать, что apply или call можно было использовать при написании кастомного bind )) в остальном отличное видео
@some_user1337
@some_user1337 5 жыл бұрын
Отдельное спасибо за примеры использования, не всегда понятно где и как реализовать ту, или иную особенность. 👍
@prometheusmusic4559
@prometheusmusic4559 4 жыл бұрын
Вот +++
@arseeq
@arseeq 3 жыл бұрын
Это талант так легко и просто объяснять вещи. Спасибо!
@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 и он сам зарежит эти рекомендации
@antontuchkin9396
@antontuchkin9396 4 жыл бұрын
Огромное спасибо за такой ценный free материал! Есть маленькая просьба, для таких новичков как я, было бы очень ценно понимать в каких случаях применять полученные знания. Пара примеров из реальной жизни.
@user-vp1pu1pz6m
@user-vp1pu1pz6m 6 ай бұрын
там как раз и были наведены примеры из реальной жизни, например urlGenerator
@ilgul9177
@ilgul9177 4 жыл бұрын
Коротко, понятно + практика... Как итог - отличный урок. В общем как всегда.
@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" Можете ли подробнее объяснить как использовать доп параметры?
@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 замыкания.
@user-il9nt4hl8u
@user-il9nt4hl8u 3 жыл бұрын
Спасибо за видео! До момента, когда откуда-то появились ARGS было все понятно.
@CHEloveg22
@CHEloveg22 4 жыл бұрын
Самое доступное объяснение. Спасибо большое за труд!
@user-yx4ov2xx8s
@user-yx4ov2xx8s 4 жыл бұрын
Спасибо большое за этот плейлист! 👍👍😊
@zerocool14pvo
@zerocool14pvo 5 жыл бұрын
Красавчик, видео одно за другим!
@VladilenMinin
@VladilenMinin 5 жыл бұрын
Главное не сбавлять темп)
@igordudin289
@igordudin289 4 жыл бұрын
Большое Вам спасибо за такое подробное и простое объяснение!
@grangeld
@grangeld 3 жыл бұрын
Огромное Спасибо! я понял наконец-то что такое замыкание. Надеюсь ты продолжишь снимать ролики, они отличные!!!
@ns-br9zw
@ns-br9zw 4 жыл бұрын
Замечательное объяснение. Спасибо!
@Aaaa-jn4bm
@Aaaa-jn4bm 2 жыл бұрын
Мне кажется что в этом видео пропустили самый главный момент, без которого замыканий не существовало бы - вы пропустили момент создания лексического окружения, которое выполняется каждый раз при вызове функции
@crn05
@crn05 Жыл бұрын
наверное чтобы не усложнять и так сложную тему.
@denishaleckiy8303
@denishaleckiy8303 Жыл бұрын
@@crn05 это центральный момент, на котором все работает... буквально, кроме этого ничего нет
@tylerdurden9008
@tylerdurden9008 2 ай бұрын
Очень хорошо! Исчерпывающая информацию + сразу же можно выполнить самостоятельное задание и тут же его проверить. Большое спасибо автору, за возможность подтянуть свои знания!
@lumeaceaiuluisrl6343
@lumeaceaiuluisrl6343 3 жыл бұрын
На самом деле, Вы большой молодец, Владилен)) Спасибо!
@kostasancez2358
@kostasancez2358 5 жыл бұрын
Ещё интересно было бы про AJAX, c практикой, короче скоро это будет топовый канал на ютубе с годными уроками по фронту))
@Andreikatm
@Andreikatm 4 жыл бұрын
XMLHttpRequest (XHR), AJAX, REST и тд жду!!!
@roman--s
@roman--s 4 жыл бұрын
В моде FETCH , Socket.io. REST API да, нужная штука.
@user-ox8ni9oz2p
@user-ox8ni9oz2p 2 жыл бұрын
Кайф! Тяжело найти в инете такое понятное объяснение. Спасибо!
@XenonGamesChannel
@XenonGamesChannel 3 ай бұрын
Лаконично!!👍👍👍 без воды и с реальными примерами
@user-pk2rw1li2q
@user-pk2rw1li2q 3 жыл бұрын
Премию оскар за лучшее русскоязычное объяснение javascripta )
@dmitriyshisterov8400
@dmitriyshisterov8400 3 жыл бұрын
Чувак, огромная благодарность!) Великолепно объясняешь!
@user-lw3qt4zb6p
@user-lw3qt4zb6p 4 жыл бұрын
Ты лучший. Наконец стал понятен смысл замыканий
@vyacheslavvasilev1776
@vyacheslavvasilev1776 Жыл бұрын
Действительно простым языком. Спасибо за материал, помогли разобраться!
@alextopsite
@alextopsite Жыл бұрын
Лучшее объяснение замыканий в JavaScript, что я слышал
@RewCSharp
@RewCSharp 4 ай бұрын
Спасибо за урок!
@malina5639
@malina5639 2 жыл бұрын
Браво! Все супер понятно! Спасибо!
@unknown.6914
@unknown.6914 Жыл бұрын
прекрасный урок, спасибо 😊
@Leo-ke3hv
@Leo-ke3hv 4 жыл бұрын
объясняешь великолепно
@KuKu_RuKu88
@KuKu_RuKu88 4 жыл бұрын
ОЧЕНЬ ХОРОШО ОБЪЯСНИЛИ. СПАСИБО
@user-yk9nj6co9d
@user-yk9nj6co9d Жыл бұрын
Всё ясно и понятно. Спасибо.
@BrainOverflow-eof
@BrainOverflow-eof 2 жыл бұрын
Спасибо, это лучшее объяснение.
@user-co3kd1ej7o
@user-co3kd1ej7o 4 жыл бұрын
я вот просто, благодарен за твои уроки!!!!!!!!!!!
@user-be8yr8lh8z
@user-be8yr8lh8z 4 жыл бұрын
Отличный контент, спасибо большое)))
@stanislavmalyshev5209
@stanislavmalyshev5209 2 жыл бұрын
Вообще лучшее объяснение!
@_akunin3674
@_akunin3674 3 жыл бұрын
Отличный контенет. Спасибо
@bobmagrega
@bobmagrega Жыл бұрын
Спасибо. Именно у вас понял.
@alik64
@alik64 2 жыл бұрын
я наконец-то понял, что такое замыкание , спасибо тебе огромное 🚀
@user-nw3nt9kq6m
@user-nw3nt9kq6m 3 жыл бұрын
Спасибо тебе, Ленин, ты крут!
@alekseygaikevich4195
@alekseygaikevich4195 4 жыл бұрын
Спасибо) отличное объяснение!!
@unheilbar
@unheilbar 4 жыл бұрын
Ваш контент из русскоязычного один из лучших, что я видел/читал.
@VladilenMinin
@VladilenMinin 4 жыл бұрын
Благодарю)
@user-bu4lx9ox9z
@user-bu4lx9ox9z Жыл бұрын
Спасибо за хорошее объяснение.)
@user-eh1nj8el9l
@user-eh1nj8el9l 2 жыл бұрын
Шикарная информация!
@vazgenaleksanyan2929
@vazgenaleksanyan2929 5 жыл бұрын
круто все. Было здорово посмотреть твой урок по созданию JAVASCRIPT плагина.
@iznu3
@iznu3 3 жыл бұрын
Спасибо за видео!
@user-ku2sn1wz1c
@user-ku2sn1wz1c 2 жыл бұрын
Лучший способ научить - самый простой! Спасибо, переплюнул 90% инфы на эту темую
@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(); }
@romasbitinas643
@romasbitinas643 Жыл бұрын
Спасибо вам за видео
@alexispell4251
@alexispell4251 4 жыл бұрын
Не скажу ничего нового... Ты просто великолепен) Даешь окрепнуть в понимании нативного js так, как не делают другие и близко... На очереди приобретение курса по Node. Спасибо за все твои труды
@hasst9261
@hasst9261 4 жыл бұрын
Спасибо за уроки, отличное качество.
@VladilenMinin
@VladilenMinin 4 жыл бұрын
Благодарю за отзыв) Ознакомься с другими роликами на канале
@hasst9261
@hasst9261 4 жыл бұрын
@@VladilenMinin Я знаком, спасибо и буду знакомиться дальше). Удачи в делах!
@anastasijavvo
@anastasijavvo Жыл бұрын
спасибище, реально все четко и понятно!
@user-ts4pq8mh7u
@user-ts4pq8mh7u 4 жыл бұрын
Хочу сказать что твой контент очень крутой! Наконец то не тот контекст как объявлять и складывать переменные а именно то что нужно.
@user-zp8xz5fu2j
@user-zp8xz5fu2j 4 жыл бұрын
О боги,я понял это спустя неделю попыток и тонны лит-ры и видео) Прикладные примеры - самое важное,за это отдельное спасибо!
@user-zp8xz5fu2j
@user-zp8xz5fu2j 3 жыл бұрын
@@ne4to777 Почему ты так уверен?)
@user-zp8xz5fu2j
@user-zp8xz5fu2j 3 жыл бұрын
@@ne4to777 Ну не в развернутой форме, очевидно (формат не подразумевает) Но все же, базовое понимание видео дало
@user-nw3nt9kq6m
@user-nw3nt9kq6m 3 жыл бұрын
Комментарий из восьми слов для поддержки этого видео.
@VladimirDevyatoff
@VladimirDevyatoff 4 жыл бұрын
Довольно простая тема, если по человечески её объснить) Спасибо, наконец-то понял на 100%
@VladimirDevyatoff
@VladimirDevyatoff 3 жыл бұрын
@@ne4to777 это когда функция получила внешнюю переменную и забыла про внешнюю)
@VladimirDevyatoff
@VladimirDevyatoff 3 жыл бұрын
@@ne4to777 ага. работает с ней как с копией)
@alira2924
@alira2924 4 жыл бұрын
Спасибо за урок
@sekirogenshiro2210
@sekirogenshiro2210 4 жыл бұрын
офигенный урок
@Woody_Johnson
@Woody_Johnson 2 жыл бұрын
Спасибо большое за объяснение! Но всё же не совсем понятно, зачем в данном случае нужно замыкание. Можно ведь в рамках одной функции всё сделать: function bind(context, fn) { return fn.call(context) } Какой практический смысл здесь в замыкании?
@lemmesolo
@lemmesolo Жыл бұрын
там даже return не нужен
@cleardoc7554
@cleardoc7554 Жыл бұрын
тогда ведь теряется смысл, который заложен в оригинальный bind: сначала указывается контекст, затем вызывается. Собственно, замыкание в этом случае и служит как раз для "отложенного" вызова.
@renat_mg6881
@renat_mg6881 3 жыл бұрын
Отличный урок!
@olesilin3011
@olesilin3011 Жыл бұрын
Примеры и задачи должны решаться с замыканием проще и изящней, чем без него. Иначе вопрос "зачем" остается не раскрыт. А по механике все очень доходчиво.
@yury497
@yury497 10 ай бұрын
На мой взгляд стоило сделать немного иначе. function bind(fn) { return function(context) { fn.apply(context) } } const personData = bind(logPerson) Получили функцию, возвращающую данные любого человека.
@genykm
@genykm 4 жыл бұрын
А почему ни слова об областях видимости переменных во вложеных функциях? Мне кажется это тоже важно в данном контексте.
@andTutin
@andTutin 2 жыл бұрын
а что там поменялось ?
@GoPro-ts5sh
@GoPro-ts5sh 2 жыл бұрын
@@andTutin var задизили, стрессует
@epic3386
@epic3386 Жыл бұрын
а об этом ты узнаешь если купишь курс! и там тебе дадут новое видео где раскроют твой вопрос, но не скажут ещё о чем-нибудь, об этом тебе расскажут уже в следующих купленных видео )) и так до тех пор пока ты не поумнеешь и не начнёшь читать книги по js'у))
@genykm
@genykm Жыл бұрын
@@epic3386 уже работаю в Оракле, так-что не актуально )
@epic3386
@epic3386 Жыл бұрын
Мои искренние поздравления )) видимо начал читать книжки?))
@razumizm
@razumizm 4 жыл бұрын
10:50 Оператор Rest, а не Spread в данном случае. Spread используется для разделения коллекций на отдельные элементы, а rest, наоборот, для соединения отдельных значений в массив.
@user-dl2lm7ju2y
@user-dl2lm7ju2y 3 жыл бұрын
понял. Спасибо!
@pitbrest
@pitbrest 2 жыл бұрын
Как уже писал кто-то ранее, первые два ролика прям доходчиво, тут пример в конце выбивает из колеи понимания.
@user857ho8t
@user857ho8t 11 ай бұрын
четко объяснил, спс
@DrZlad
@DrZlad 2 жыл бұрын
Большое спасибо Автору за: показал зачем оно в практическом смысле надо. А то остальные только счетчик показывают и всё
@user-vd9yw5ez3e
@user-vd9yw5ez3e 4 жыл бұрын
Владлен, у тебя ахрененный канал. Побольше бы таких))
@VladilenMinin
@VladilenMinin 4 жыл бұрын
Благодарю)
@wawawf
@wawawf 5 жыл бұрын
годнота!
@paveltk3092
@paveltk3092 4 жыл бұрын
замыкание - функция внутри функции и все! гениально
@zxspectrum3352
@zxspectrum3352 4 жыл бұрын
Нет не все ибо замыкается область видимости родительской ф-ции, в этом и весь смысл, а не просто "функция в функции" и дочерняя ф-ция сохраняет доступ к этой видимости (переменным родительской ф-ции).
@bukanaka
@bukanaka 2 жыл бұрын
@@zxspectrum3352 Именно так. А утверждение замыкание это вызов функции в функции не верно
@trippertripperovich6062
@trippertripperovich6062 Жыл бұрын
Спасибо!
@Abdul-hy4cy
@Abdul-hy4cy 2 жыл бұрын
Спасибо. С 4-ого раза просмотра видео, мне всё же удалось, самому написать функцию bind работающую.
@VladilenMinin
@VladilenMinin 2 жыл бұрын
На канале есть подробный ролик про его создание)
@avakarchuk
@avakarchuk 9 ай бұрын
Спасибо! Наконец Я понял замыкание полностью 😂
@zeNoldor
@zeNoldor Жыл бұрын
Огромное спасибо! Шедевральное обьяснение с примерами. Как минимум, можно будет обьяснить на собеседовании принцип работы или написать самому, а не пытатьсчя заучивать непонятные словешки)))
@BraentR
@BraentR Жыл бұрын
Спасибо
@vladvdovychenko6506
@vladvdovychenko6506 Жыл бұрын
Спасибо большое за урок. Только есть вопрос про последнее действие. Понятно что метод apply() должен обязательно иметь два параметра, но что имеется ввиду под массивом ...args ? не понял зачем нужно передавать внутри второй функции ещё какие-то параметры, если функция bind требует только обьект для контекста (person) и саму функцию вывода (logPerson) информации в консоли ?
@juriskrumgolds5810
@juriskrumgolds5810 3 жыл бұрын
Самое интересное в замыканиях то, что я как-то всегда боялся этого слова, казалось что это какой-то хитровыдуманный и сложный программистский концепт. А когда понял что это такое, оказалось я сам неоднократно использовал его в своем коде даже не подозревая, чисто на интуитивном уровне.
@crn05
@crn05 Жыл бұрын
такое часто бывает, пользуешься чем-то, а оказывается у этого страшное название есть
@valerian6943
@valerian6943 3 жыл бұрын
толково объяснил
@Max-kr4ie
@Max-kr4ie 4 жыл бұрын
Очень годно))
@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 ай бұрын
Думаю что код написан правильно т.к. дело не в принимаемых аргументах, нет. Стрелочные ф-ции как и каррируемые могут создавать замыкание, они все же имеют доступ к содержимому родителя (по научному "лексическому окружению родителя"). Замыкание и каррирование - это разные вещи. Карррируемые ф-ции в отличии от стрелочных преобразуют ф-ции с множеством аргументов в последовательность ф-ций с одним аргументом. И спасибо за коммент, узнал что есть каррируемые ф-ции)👍
@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 нужен
@mukhammadrustambayev2051
@mukhammadrustambayev2051 5 жыл бұрын
далее: callback, promise, async/await.
@user-vs6bg3xn5s
@user-vs6bg3xn5s 3 жыл бұрын
Ты лучший фронтенд блогер. И я могу обосновать это. Во-первых: за такой короткий промежуток времени ты создал огромный канал с исчерпывающей информацией по фронтенд разработке. Во-вторых: любой человек с желанием может просто внимательно смотря твои видео по порядку и выполняя вместе с тобой задачи научиться всему за кратчайшие сроки. Все это благодаря структурированности и продуманности каждого плейлиста и видео. Я боюсь представить скольких усилий это все тебе стоило. В-третьих: все видео без лишней воды, и неуместных рофлов. В-четвертых: на этом канале я не увидел ни одного видео ради видео, каждое видео отличается от другого и раскрывает разные темы. В-пятых: четкая дикция, отлично выступаешь на камеру. Ты на верном пути братан, продолжай
@VladilenMinin
@VladilenMinin 3 жыл бұрын
Благодарю за такой отзыв, мне очень приятно)
@dadya_feodor
@dadya_feodor 3 жыл бұрын
Сделал 2 раза, один раз не понял в чем прикол и сделал через bind. Потом посмотрел как ты решил, понял, что смысл был в том, чтобы не использовать bind. На сл. день сел, написал function bind (context, fn) { return fn.apply(context) } оно работает, и я не понял зачем ещё какие-то аргументы передавать... В общем, было прикольно подумать, но задачка должна быть явно какой-то другой)
@user-nl6uj2dt2o
@user-nl6uj2dt2o 3 жыл бұрын
Привет, отлично!
@QaZaQ_Stranger
@QaZaQ_Stranger 6 ай бұрын
Кто-то пишет ,что сложно и не понятно😂 но по мне это самое крутое обьяснение замыкания которое я видел
@littlepony7160
@littlepony7160 Жыл бұрын
Страшная тема для соло-обучения в онлайн-учебниках. В статье со скопом из "контекста", "лексического окружения" и "сборщика мусора" - можно впасть в депрессию. Напоминает мене, как меня в колледже учили "что такое транзистор" в течении целого года + курсовая по ним. Ну и тот самый страх, при мысли того, что тебе когда-то придётся его использовать. Так сильно заваливать информацией, когда это можно обьяснить так просто. Спасибо за ваш ролик. Какой же всё-таки талант - уметь обьяснять вещи просто.
@user-vu9pp3bm8f
@user-vu9pp3bm8f 4 жыл бұрын
Супер!!!
@user-rr2nw7if7u
@user-rr2nw7if7u 4 жыл бұрын
Годнота :))))
@kleim
@kleim Жыл бұрын
Кастомный bind без использования apply/call: function bind(context, f){ const obj = {...context, f} obj.f() }
@ugolblab6940
@ugolblab6940 3 жыл бұрын
Добрый день, подскажет пожалуйста, а вложеная фукция ведь может быть стрелочной? И если да то будет ли она работать так же как и с обычным декларированием? И нет ли каких-то подводных камней с использованием this в обоих случаях. Спасибо
@roman.kamlykov
@roman.kamlykov 3 жыл бұрын
function bind(obj, func) { const context = { ...obj, func } // closure return function() { context.func(); } // returning a function }
@vegtalk8920
@vegtalk8920 3 жыл бұрын
Единственно верный вариант ответа. Ибо call и apply это по сути тот же bind.
@aggressivenvironment
@aggressivenvironment 3 жыл бұрын
спасибо !
@sasharudenko5446
@sasharudenko5446 4 жыл бұрын
я что-то не вкурил про аргументы. они ведь не передаются. откуда они появляются ? а с учетом первичного задания, все вообще сводится до fn.apply(context)()
@user-ql4xu5qu2u
@user-ql4xu5qu2u 4 жыл бұрын
Там не аргументы появились, а поля объекта из контекста. Я так понял параметры функция принимает, потому что спроектирована с запасом на разные ситуации.
@tentacle8148
@tentacle8148 3 жыл бұрын
Они появляются от rest params
@LIVESPORTPLUS
@LIVESPORTPLUS 4 ай бұрын
По последней задачки думаю нужен апдейт: Функция bind в вашем примере создает "обертку" вокруг функции fn, которая при вызове устанавливает this в переданный контекст context. Это позволяет вам вызывать функцию fn так, как если бы она была методом объекта context. Давайте разберемся, как это работает, шаг за шагом: 1. bind принимает два аргумента: context и fn. 2. bind возвращает новую функцию, которая при вызове будет применять функцию fn к контексту context. 3. Когда возвращенная функция вызывается, она использует ...args для сбора всех переданных аргументов в массив args. 4. fn.apply(context, [args]) вызывается внутри этой функции. Метод apply используется для вызова функции fn с конкретным значением this (в данном случае context) и массивом аргументов args. В вашем конкретном случае использование ...args и [args] вокруг args не имеет смысла, поскольку logPerson не принимает никаких аргументов, и использование apply с массивом аргументов в этом случае избыточно. Это может быть полезно, если бы функция logPerson принимала дополнительные параметры. Тем не менее, чтобы функция bind работала корректно с функцией logPerson, которая не принимает аргументы, вам нужно вызвать fn.apply(context) без второго параметра или использовать пустой массив для аргументов: function bind(context, fn){ return function(){ // здесь args не нужны, так как logPerson их не принимает return fn.apply(context); // вызываем fn с контекстом context и без аргументов } } bind(person1, logPerson)(); // Person: Misha, 22, Frontend bind(person2, logPerson)(); // Person: Lena, 18, SMM Использование ...args и [args] имело бы смысл, если бы вы хотели, чтобы функция bind могла принимать и передавать любое количество аргументов в функцию fn, но в вашем текущем примере это не требуется.
@aleksgavrilov5275
@aleksgavrilov5275 3 жыл бұрын
В этом плейлисте два первых видео были просто великолепны, все чётко, ясно и понятно, но здесь что то пошло не так - тема замыкания не раскрыта, создание функции bind тоже, скорее ещё больше запутался... пошёл разбираться
@VladilenMinin
@VladilenMinin 3 жыл бұрын
На канале есть подробный ролик про bind
@viktorpoliushko2015
@viktorpoliushko2015 4 жыл бұрын
Сколько уже слов было сказано об этом канале, но я не поленюсь и тоже напишу. Очень лаконично и четко, все по полочкам без воды, спасибо за труды. Привіт з України!
@VladilenMinin
@VladilenMinin 4 жыл бұрын
Привет с Шри-Ланки)
@myroadmalankajosef9192
@myroadmalankajosef9192 9 ай бұрын
та ну нахуй тебе занесло!))) а що там на Шрі Ланці??? Країна третього світу!!! Я б зрозумів, аби ти із Ліхтенштейну привіт передавав, або із Швейцарії)@@VladilenMinin
Урок 5. JavaScript. Promise. Что это, как работает (+ пример)
23:18
ISSEI funny story😂😂😂Strange World | Pink with inoCat
00:36
ISSEI / いっせい
Рет қаралды 27 МЛН
didn't want to let me in #tiktok
00:20
Анастасия Тарасова
Рет қаралды 11 МЛН
Trágico final :(
01:00
Juan De Dios Pantoja
Рет қаралды 22 МЛН
КАРМАНЧИК 2 СЕЗОН 4 СЕРИЯ
24:05
Inter Production
Рет қаралды 661 М.
Замыкания в JavaScript с примерами. Фундаментальный JavaScript
22:39
Замыкания, просто и с примерами. Функции JavaScript
39:25
WebDev с нуля. Канал Алекса Лущенко
Рет қаралды 44 М.
Урок 6. JavaScript. Объекты с Object.create. Что такое getters, setters
14:34
FRONTEND: Мифы и Реалии рынка труда
34:43
Владилен Минин
Рет қаралды 40 М.
Контекст вызова функции. Фундаментальный JavaScript
21:51
Михаил Непомнящий
Рет қаралды 20 М.
Замыкания в JavaScript
18:50
WebDev с нуля. Канал Алекса Лущенко
Рет қаралды 52 М.
Что такое рекурсия. Фундаментальный JavaScript
20:32
Михаил Непомнящий
Рет қаралды 21 М.
ISSEI funny story😂😂😂Strange World | Pink with inoCat
00:36
ISSEI / いっせい
Рет қаралды 27 МЛН