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

Поделиться
HTML-код
  • Опубликовано: 6 сен 2018
  • Замыкания - одна из самых мощных особенностей 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 #замыкания #прототипы

Комментарии • 132

  • @liveinenduro2647
    @liveinenduro2647 5 лет назад +87

    так объяснял что сам понял - тру стори

  • @anastasiazaytseva6922
    @anastasiazaytseva6922 5 лет назад +42

    Такие видюшки помогают быстро освежить знания перед собеседованиями) жаль что их так мало

  • @vladyslavanakonechna7693
    @vladyslavanakonechna7693 5 лет назад +5

    Это гениальное объяснение замыканий! И правда легонько и не навячиво. Спасибо!

  • @wayfarerofuntroddenpaths7571
    @wayfarerofuntroddenpaths7571 5 лет назад +31

    Спасибо Юра за твои хоть и не большие, но все таки понятные изложения. Ждем-с новые твои выпуски по JS.

  • @SergeSchekhovtsov
    @SergeSchekhovtsov 2 года назад +1

    Великолепное объяснение. Закрыл пробелы и всё понял с первого раза.

  • @oleksiipetrenko3824
    @oleksiipetrenko3824 5 лет назад +20

    Юра, где же видео про асинхронность?

  • @Sefian
    @Sefian 2 года назад +1

    Спасибо, все гораздо проще чем мне казалось. Главное что помогли поменять, так это способы применения.

    • @HillelITSchool
      @HillelITSchool  2 года назад

      Раді, що були корисні 💙

  • @user-gz3hk1pv1p
    @user-gz3hk1pv1p 4 года назад +8

    уже дня 3 пытаюсь разобраться в этой теме, что зачем и как, а тут посмотрел данное видео, и за 15 мин понял что оно такое)) спасибо автору!) лайк однозначно!)

  • @Dozortsev
    @Dozortsev 4 года назад +1

    Юра, ты крут! Спасибо за видео

  • @MrCter
    @MrCter 5 лет назад +3

    Юра, продолжайте, умоляю ))

  • @40par
    @40par 4 года назад +1

    Спасибо, только теперь разобрался

  • @disposables72
    @disposables72 4 года назад +1

    Подпишусь, может побольше будет таких мини-ликбезов. Перед сном самое то)))

  • @aktotuttttt
    @aktotuttttt 4 года назад

    И заслуживает лайка бро. Как же круто рассказал. Поклон, низкий, бью челом

  • @dmitrijponkin
    @dmitrijponkin 5 лет назад

    Круто!
    Спасибо за Ваш труд))

  • @coltesun457
    @coltesun457 4 года назад

    Спасибо! Очень доступно объяснил)

  • @Bunny_Love
    @Bunny_Love 3 года назад

    Мне пришлось несколько раз внимательно прослушать - но в итоге я все поняла! Огромное спасибо!

  • @user-zd2zm7zv9d
    @user-zd2zm7zv9d 5 лет назад +1

    Спасибо Родной!!!! Ты лучший:))))

  • @dalaysalchak5073
    @dalaysalchak5073 4 года назад

    Толково объяснил. Спасибо!

  • @user-uv5qy3lq3i
    @user-uv5qy3lq3i 4 года назад

    Просто супер, спасибо большое)

  • @AlexeyTo
    @AlexeyTo 5 лет назад +38

    Очень просто и понятно объясняется, отличное видео!

    • @user-et4vi6ei4z
      @user-et4vi6ei4z 5 лет назад

      Рок

    • @jenyaspace
      @jenyaspace 5 лет назад

      а теперь точно также но про промисы

  • @user-vk6wk8bs5m
    @user-vk6wk8bs5m 2 года назад

    Очень хорошее видео! Благодарю)

  • @user-nm5hc6jw9f
    @user-nm5hc6jw9f 3 года назад

    Редко пишу комментарии, но за такое хорошее видео, грех не написать!) Спасибо вам.

  • @akkelaforest779
    @akkelaforest779 2 года назад

    Спасибо, очень доступно обьяснили)

  • @user-tk7qv9rv2c
    @user-tk7qv9rv2c Год назад

    Вроде и до этого понятно было, но как послушала, поняла, что только сейчас и поняла))))😁

  • @user-yv3gg4um2i
    @user-yv3gg4um2i 5 лет назад +2

    Спасибо большое !! Есть просьба сделать серию уроков ES6-7

  • @vitalikgorohkov1896
    @vitalikgorohkov1896 2 года назад

    На этом видео понял тему! спасибо за помощь

    • @HillelITSchool
      @HillelITSchool  2 года назад

      Рады, что были полезны )

  • @dmitryparshin4204
    @dmitryparshin4204 5 лет назад +2

    какой же милый лектор

  • @serggey75
    @serggey75 2 года назад

    вот только теперь я понял замыкания) спасибо)

    • @HillelITSchool
      @HillelITSchool  2 года назад

      Раді, що стали в нагоді!

  • @user-lx5vv3uu8u
    @user-lx5vv3uu8u 3 года назад

    Спасибо!

  • @XanjaevRodmam
    @XanjaevRodmam 4 года назад

    Бро. Спасибо Бро. Ты настроящий Бро, Бро

  • @vladvoloshenko5701
    @vladvoloshenko5701 2 года назад

    спасибо)

  • @Hannah-ly6ff
    @Hannah-ly6ff 3 года назад

    спасибо!!

  • @YaroslavEx
    @YaroslavEx Год назад

    дякую, реально допомогло!

  • @user-lr8vd1cw9s
    @user-lr8vd1cw9s 3 года назад

    Пример с счетчиком очень полезный

  • @yuriiserdiuk3918
    @yuriiserdiuk3918 4 года назад

    Дякую за відео , все сподобалось ))

  • @PacoOfficial
    @PacoOfficial 5 лет назад +1

    супер

  • @whatifiwant
    @whatifiwant 4 года назад +2

    2020((( а мы ещё ждём!)))

  • @user-kl4yk8tm2b
    @user-kl4yk8tm2b 5 лет назад +1

    Я уже раз 10 посмотрел видео про this и прототипы - обожаю его. И вот подъехал потенциальный новый фаворит.)

    • @fonharry9086
      @fonharry9086 5 лет назад

      Это какое?

    • @user-kl4yk8tm2b
      @user-kl4yk8tm2b 5 лет назад

      ruclips.net/video/0vs6WkNyzec/видео.html&list=LLeXZ31bUXjUlXgMibPcrkCw&index=18

    • @fonharry9086
      @fonharry9086 5 лет назад

      благодарю

  • @user-re7hx3sq2c
    @user-re7hx3sq2c 5 лет назад +8

    Можно этот пример переписать в одну строку const Counter = (count = 0) => () => ++count, но тогда не так понятно конечно, без привычки.

  • @grimkasad4183
    @grimkasad4183 3 года назад

    Фантастика, нарешті)

  • @aleksandrpolevyk9572
    @aleksandrpolevyk9572 3 года назад

    Объясняешь просто супер. Музыку приложите в описание.

  • @mariapokrasa2966
    @mariapokrasa2966 5 лет назад +3

    Лайк не глядя 🤣 Лучший учитель 👍👍👍👍

  • @artemshulga7316
    @artemshulga7316 5 лет назад +7

    Спасибо. Прочел в книге Выразительный js о замыканиях но не понял, а здесь все очень понятно.

    • @faizulla5838
      @faizulla5838 3 года назад +1

      почитай снова, здесь он путает.... один палец с другим.

  • @djoniKage
    @djoniKage 5 лет назад +8

    А я думал замыкание это что то космическое. Видите от препода многое зависить. Многие просто не умеют передавать свои знания и еще больше запутывает студента. А некоторые вот так просто человеческим языком доступно делают.

  • @santiagozarpado1145
    @santiagozarpado1145 4 года назад +1

    замыкания - интересная и иногда полезная техника, но никак не необходимая
    без них и туда и сюда

  • @alenache1
    @alenache1 2 года назад

    кстати, для замыкания не обязательно возвращать одну функцию из другой, можно положить ее в память любым способом, например, связать ее со слушателем событий

  • @alexbliznec
    @alexbliznec 4 года назад +28

    2019 на дворе, а видео про асинхронность так нет(((

    • @CozyAvocados
      @CozyAvocados 3 года назад +2

      2020 и тоже нет(

    • @St3rnhunt3r
      @St3rnhunt3r 3 года назад

      @@CozyAvocados и в 2021 не будет(

    • @user-lx5vv3uu8u
      @user-lx5vv3uu8u 3 года назад

      Уже 2 января 2021!
      Ишо нЭт! )))

  • @divocean4085
    @divocean4085 5 лет назад +2

    Я вот чего не понял только. Мы вызываем ту анонимную функцию, которая возвращает увеличенное значение переменной 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

  • @ssurrokk
    @ssurrokk 3 года назад

    🔥

  • @saidvalc2177
    @saidvalc2177 5 лет назад +18

    мне не перезвонили

  • @andreyzinovjev3920
    @andreyzinovjev3920 3 года назад +2

    Бен Аффлек в JS))

  • @user-yl3vj9ms3c
    @user-yl3vj9ms3c 4 года назад +1

    Лексическое окружение функции это не контекст того, где она объявлена. Согласно спецификации, лексическое окружение функции создается во время выполнения этой функции, а замыкание образовывается в момент создания объекта функции, при чём если создавать объект функции с помощью синтаксиса 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 года назад

      да, все так, там имелось ввиду внешнее лексическое окружение, вообще эти термины часто путают, я даже делал вот тут разбор - ruclips.net/video/HsXKiKNdeTI/видео.html (ссылка с тайм-меткой) но это видео было бы сильно перегруженным если бы прямо в нем это разобрать(

    • @user-yl3vj9ms3c
      @user-yl3vj9ms3c 4 года назад +1

      @@yurafedorenko1218 Интересное видео, хотя говоря про способы вызова функций в контексте this, Вы не упомянули о стрелочных функциях, но это не столь существенно. Хотя выходит, что this зависит не только от способа вызова функции но и от ее типа.
      Относительно нынешнего видео, мне кажется, что прежде всего надо говорить о том, что в среде разработчиков JS существуют три определения термина "замыкание". Первое, самое верное, которое соответствует определению для всех языков программирования - замыкание это сочетание функции и её внешнего лексического окружения. Второе - это сочетание функции и свободных переменных, которые она использует. Третье - это сочетание функции и изолированных переменных, которые она использует, при чем функция может использовать изолированные переменные из нескольких лексических окружений. Иногда замыканием называют только одну из составляющих определения, то есть или саму функцию, или сами переменные или лексическое окружение.

    • @user-yl3vj9ms3c
      @user-yl3vj9ms3c 4 года назад

      Что касается первого определения, еще существует немного другая версия - замыкание это сочетание функции и её родительского лексического окружения, то есть того, в котором она была определена, но тут появляется проблема в случае синтаксиса new Function. К тому же коректнее говорить о лексическом окружении кода, в котором она была определена.

    • @user-yl3vj9ms3c
      @user-yl3vj9ms3c 4 года назад

      Теоретически второе определение тоже соответсвует определению замыкания для всех языков программирования. Можно сказать, что первое более абстрактное и основанное на спецификации, а второе более простое и основанное на практике, при чём они отличаются друг от друга, ведь свободные переменные могут находиться не только во внешнем лексическом окружении.

    • @user-yl3vj9ms3c
      @user-yl3vj9ms3c 4 года назад +1

      Я еще раз проверил разные определения этого термина, относительно других языков и в целом. Получается, что второе определение, то есть "сочетание функции и свободных переменных, которые она использует" и есть самым правильным. Возвращаясь к видео, то что Вы имели в виду это конечно хорошо знать, но Вы ведь сказали другое, значит ошиблись, то есть вводите людей в заблуждение. Надо бы это исправить, а то получается как-то нехорошо.
      Тут вот еще одно видео live.ithillel.ua/javascript-funkcii-oblasti-vidimosti-zamykanie от вашей школы с другой версией определения, насколько я понял основанной на том, что показывает браузер.

  • @user-eu5jy2hc4u
    @user-eu5jy2hc4u 3 года назад

    👍

  • @jorgen5462
    @jorgen5462 5 лет назад

    Юра, тему промисов бы поднять) Еще requestAnimationFrame.

  • @alenache1
    @alenache1 2 года назад

    я бы сказал так: "Замыкание - это снэпшот всех доступных fункции переменных в момент ее создания"

  • @yaroslavzef7267
    @yaroslavzef7267 4 года назад

    Юра, а как там дела с асинхронностью обстоят?

  • @unknown6535
    @unknown6535 4 года назад

    Можно сказать, что функция counter - это фабрика счётчиков, только порождает эта фабрика функции

  • @user-ee1xf7qm5d
    @user-ee1xf7qm5d 4 года назад +6

    господи, я не дабстеп слушать сюда зашел (звук на колонках), подубавьте басы

  • @user-zk5ok6wn2l
    @user-zk5ok6wn2l 5 лет назад +1

    привет! выпусти урок по асинхронности пожалуйста! Ты же обещал!

    • @yurafedorenko1218
      @yurafedorenko1218 5 лет назад +1

      я не обещал когда оно будет, но в этом году точно)

  • @miloman1995s
    @miloman1995s 4 года назад

    Вот функция в функции сложнее даётся , че то видимо надо пересматривать

  • @MegaPupizoid
    @MegaPupizoid Год назад

    Что-то недогнал. Разные счетчики при вызове новой функции пытаются получить разные данные из одни и тех же переменных 🤔?

  • @kirillpodolinniy309
    @kirillpodolinniy309 4 года назад +2

    На дворе уже 20-й, а про асинхронность ни слова..)

  • @nursultanmuhambetov8427
    @nursultanmuhambetov8427 2 года назад

    var же делает переменую глобальной?

    • @slavkapiyavka
      @slavkapiyavka 2 года назад

      да, но если переменная объявленная при помощи var лежит в функции (проще говоря, в блоке кода {}), то у этой переменной область видимости становится блочной, функциональной). а вообще используйте const :)

  • @H1roHamada
    @H1roHamada 4 года назад

    Можно ли сказать, что замыкание это функция внутри функции. Как я понял это один из вариантов ответа на вопрос: "Что такое замыкание?"

    • @kostyafrompiter
      @kostyafrompiter 4 года назад

      Я бы на собесе ответил так : замыкание - это вызов функции с помощью другой функции)))))

  • @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

  • @TinTaBraSS777
    @TinTaBraSS777 4 года назад

    что нельзя просто сказать что переменная а читаема функцией но не изменяема а переменная б читаема и изменяема функцией но не видима другими функциями и програмой !?

  • @victor-zz6xn
    @victor-zz6xn 4 года назад

    короче говоря, в джава скрипт замыкание это как в питоне локальные перемённые.

  • @azuresnake6301
    @azuresnake6301 4 года назад +1

    Никто так и не написал, что у вас в комментариях ошибка. При первом вызове она выдаст 0, а не 1. Потому что в коде используется не ++counter, a counter++

  • @user-xz1nb2ks1h
    @user-xz1nb2ks1h 2 года назад

    ааааа

  • @jorgenUA
    @jorgenUA 5 лет назад

    посмотрел время видео - захотел диз влепить, но решил глянуть...нормально объяснил, лаконично. Функцию стрелкА, конечно не трогал, но все гглавные аспекты объяснены. Спасибо.

  • @3bbiani
    @3bbiani 5 лет назад +3

    Несколько часов пытаюсь понять эту тему, почему в теме о замыкании на общеизвестном сайте learn.javascript.ru в примере со счетчиками нигде не объясняется, почему счетчик в случае замыкания увеличивается. Решил посмотреть видео, чтобы услышать альтернативное видение. Как результат: в данном видео тупо рассказывают сокращенную версию статьи вышеуказанного сайта, код совпадает до мельчайших подробностей, прям выдран с сайта. При этом никто даже не пытается объяснить, почему увеличивается счетчик. Так не делается. Тема не раскрыта, дизлайк.

    • @user-ei9bm8fq4u
      @user-ei9bm8fq4u 5 лет назад +1

      У меня наоборот. Читал на лерн.джавасрипт.ру и ничего не понял (или только частично) а вот это видео внесло полную ясность.

    • @3bbiani
      @3bbiani 5 лет назад

      @@user-ei9bm8fq4u это конечно хорошо) так почему же увеличивается счётчик, расскажи нам всем) я например уже понял, и конечно отпишусь, если непонятно кому-то)

    • @3bbiani
      @3bbiani 5 лет назад

      @Alex Reyder задайте конкретный вопрос, иначе мне не ясно, что вам непонятно

    • @3bbiani
      @3bbiani 5 лет назад +6

      @Alex Reyder Замыкание в моем понимании - это явление, сущность, проявляющаяся, когда функция (назовем её «внешней») возвращает в качестве значения другую функцию («внутреннюю»). В таком случая внутренняя имеет доступ к внешней по области видимости, даже после того, как внешняя прекратилась. Это говорит о том, что замыкание может запоминать и получать доступ к чтению и изменению переменных и аргументов своей внешней функции, даже после того, как та прекратит выполнение. Если на пальцах, почему увеличивается счетчик: в момент вызова (исполнения) функции Counter создается объект Lexical Environment и возвращается внутренняя функция, которая записывается в переменную counter. В этой внутренней функции есть скрытое свойство [[Scope]], которое указывает на этот объект LE внешней функции. Т.к. мы эту переменную можем использовать в любой момент, сборщик мусора не удаляет LE внешней функции. При этом доступ к этому объекту остается только у внутренней функции. Мы можем читать и изменять переменные в этом объекте, что мы и делаем. При этом, учитывая, что это объект, при чтении мы всегда будем получать текущее значение. Вот и всё)

    • @youxxxgun9001
      @youxxxgun9001 4 года назад

      Ты, блять, слепой? После переменной стоит ++ т.е увеличивается на 1.

  • @dimitriy1861
    @dimitriy1861 4 года назад +1

    Да ни хрена не понятно....

  • @WikSlayer
    @WikSlayer 5 лет назад +5

    Ну зачем делать ещё одно стандартное видео по данной теме, которое повторяет информацию десятков других источников. Ничего нового. Почему бы не рассказать зачем именно нужны замыкания? Нет, не то, что было показано в видео, а действительно зачем они нужны, в первичной их сути. Почему ни слова о фунарг проблеме? Такое чувство, что автор хапнул базовых знаний и так и остался на этом видении картины замыканий. И видео лишь для галочки на канале. Буду рад ответу и объяснению, почему видео не касается этих вопросов. Если ответа не последует, тогда будет ясно, что вы не особо хорошо относитесь к своей аудитории, игнорируя подобные вопросы.

    • @yurafedorenko1218
      @yurafedorenko1218 5 лет назад

      :D

    • @WikSlayer
      @WikSlayer 5 лет назад

      Юрий, ну я серьезно, почему? Это не троллинг, не попытка задеть и прочее.

    • @WikSlayer
      @WikSlayer 5 лет назад

      В общем, ответа не будет?

    • @yurafedorenko1218
      @yurafedorenko1218 5 лет назад +7

      Виктор Данилов я понимаю, что это не тролинг, но я правда не знаю что ответить( ваш вопрос это претензия к автору школьного учебника по математике, что он плохо раскрыл тему интегралов. Я признаю - плохо. Но это просто такой формат, я пытаюсь простыми словами объяснять вещи так, чтоб это было понятно без специальной подготовки.
      А ваши пассажи насчет моего отношения к аудитории - нелепые. Мое отношение к аудитории в том, что я делаю. И вы как человек который и сам что-то снимал для ютуба можете оценить сколько сил и ресурсов здесь вложено в продакшн. И вот на этом фоне появляется человек в комментах который пишет несколько предложений и резюмирует: если не ответите то вам на всех плевать. Не надо так.

    • @WikSlayer
      @WikSlayer 5 лет назад

      Очень рад, что вы ответили. Да эти все фразы были только для того, чтобы поднять важность моего ожидания ответа. Просто предположил, что это очередной канал, в котором на комментарии не отвечают, а ответа мне очень хотелось. Извините, если что. Хорошо, условились, что это видео для начинающих. А будет ли что-то для продвинутого уровня в будущем? Просто контента для начинающих тонны просто уже. Зачем снимать то, что уже есть. Это ведь основным принципом должно быть. Просто интересно, задаётесь ли вы вопросом о том что "я только что снял то, что уже есть. Почему моё объяснение лучше, чем у других? В чём оригинальность моего видео?" И вложения сил, в первую очередь, понимаю и уважаю. Но просто если опять мусолить тему замыканий на начинающем уровне, то хотя бы сделать это.. ну как-то оригинально, что ли. Да хоть пример со счётчиком этот взять. Ну было ведь, и причём не у одного объясняющего. Поймите, я очень-очень редко оставляю комментарии, но в этот раз решил написать, чтобы просто узнать ваше мнение о вашей осознанности касательно вопроса "Зачем я создаю то, что уже есть итак? В чём ценность этого?"

  • @fresonn
    @fresonn 5 лет назад +7

    Народ, за что вы лижите автору? Он не раскрыл замыкания в js, он не сказал как работают функции, почему они являются объектами и тд. Он тупо процитировал learn.javascript.ru. Они даже не удосужились привести нормальный пример. Ужас..

    • @yurafedorenko1218
      @yurafedorenko1218 5 лет назад

      Vladislav Shevlyakov это такой формат когда берется тема и я пытаюсь ее объяснить по-простому, вот и всё

    • @fresonn
      @fresonn 5 лет назад +3

      Yura Fedoreko, ну да, а потом приходят «по-простому» такие на роботу, а там их ...

    • @yurafedorenko1218
      @yurafedorenko1218 5 лет назад +6

      ну по такой логике js нужно начинать учить с ассемблера, я как бы не против, но моя позиция такая: лучше разобраться в чем-то по книжке "для чайников" чем прочитать кнута и ничего не понять

    • @fresonn
      @fresonn 5 лет назад

      Лучше научится водить в gta, чем идти в автошколу и ничего не понять! И книги Кнута не совсем тут уместны 🙃

    • @funnyepictrailers4107
      @funnyepictrailers4107 5 лет назад

      Привет, не мог бы подсказать с чего начать новичку, что бы поглубже вникнуть в работу javascript и его ньюансы... Сам сейчас прохожу гайд от MDN, а после планирую почитать Фленегана

  • @vkgorodok
    @vkgorodok 4 года назад

    Слабенькое объяснение. Почти 7 минут бреда.. Кто хочет понять замыкание смотрите - ruclips.net/video/pahO5XjnfLA/видео.html