Learn JavaScript CLOSURES in 10 minutes! 🔒

Поделиться
HTML-код
  • Опубликовано: 17 ноя 2024

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

  • @BroCodez
    @BroCodez  Год назад +11

    // closure = A function defined inside of another function,
    // the inner function has access to the variables
    // and scope of the outer function.
    // Allow for private variables and state maintenance
    // Used frequently in JS frameworks: React, Vue, Angular
    // ---------- EXAMPLE 1 ----------
    function outer(){
    const message = "Hello";
    function inner(){
    console.log(message);
    }
    inner();
    }
    message = "Goodbye";
    outer();
    // ---------- EXAMPLE 2 ----------
    function createCounter() {
    let count = 0;
    function increment() {
    count++;
    console.log(`Count increased to ${count}`);
    }
    function getCount() {
    return count;
    }
    return {increment, getCount};
    }

    const counter = createCounter();
    counter.increment();
    counter.increment();
    counter.increment();
    console.log(`Current count: ${counter.getCount()}`);
    // ---------- EXAMPLE 3 ----------
    function createGame(){
    let score = 0;
    function increaseScore(points){
    score += points;
    console.log(`+${points}pts`);
    }

    function decreaseScore(points){
    score -= points;
    console.log(`-${points}pts`);
    }

    function getScore(){
    return score;
    }
    return {increaseScore, decreaseScore, getScore};
    }
    const game = createGame();
    game.increaseScore(5);
    game.increaseScore(6);
    game.decreaseScore(3);
    console.log(`The final score is ${game.getScore()}pts`);

    • @volkan9799
      @volkan9799 11 месяцев назад

      you can also write like this. (example 2).
      return {
      increment,
      getCount: () => count,
      };

    • @OFAMidoriya
      @OFAMidoriya 6 месяцев назад

      if you ever redo this video can you explain ex 2 more I understood everything until 4:00 and the same with ex3 every thing was ok until 9:30

  • @benzflynn
    @benzflynn 6 месяцев назад +12

    This is the only video on closures that I see here which *clearly explains the purpose* of closures.
    Nice tip on shorthand form of return statement.
    It's common to use a functional expression for the outer holding function of the closure, i.e.
    _const game = function() {_
    _. . . . ._
    _. . . . ._
    _. function increaseScore (points){_
    _. .}_
    _. function decreaseScore (points){_
    _. .}_
    _. function getScore (){_
    _. .}_
    _._
    _}_
    Then on the calling code, you just reference each of the inner functions with the prefix of the outer one, i.e.
    > _game.getScore()_

  • @orangelimesky
    @orangelimesky 5 месяцев назад +4

    This was perfectly explained. Now I understood closures. It's just a fancy name and the way it's written everywhere else is confusing because it makes it look like it can only return one function. But it's basically an object that references multiple functions within, to protect a variable from being public.
    So simple. Thank you.

  • @newmagicfilms
    @newmagicfilms 3 месяца назад +1

    Seeing this similar to a Class , and private members, was easier to grasp

  • @haidermansoor4760
    @haidermansoor4760 9 месяцев назад +7

    this is the best channel ever. Thanks alot BRO

  • @steventolerhan5110
    @steventolerhan5110 4 месяца назад +1

    how does this video only have 500 likes, legitimately the most succinct explanation I've seen so far!

  • @prashant6804
    @prashant6804 5 месяцев назад

    You explained in the context of class & objects so helpful for person like me who breath in & out object oriented programming since I started programming in 2004 with Java. Thanks!

  • @k00lmoh
    @k00lmoh 11 месяцев назад +3

    that brings back memories ngl, of when i was first learning Classes and i just couldn't get them until i understood closures

  • @skalskaga
    @skalskaga 3 месяца назад

    this is the best closures-related yt video!

  • @rhaissabgl
    @rhaissabgl 6 месяцев назад +3

    the best explanation ever!!!!

  • @MrRe-sj2iv
    @MrRe-sj2iv 7 месяцев назад

    Outstanding explanation I've ever seen on RUclips about Closure. Thank you so much bro. Keep up your good work.

  • @tonnytrumpet734
    @tonnytrumpet734 3 месяца назад

    Thanks, very well explained. Just hurts to watch a little if you are learning this after working with any OOP language for some time

  • @doronfeldman5152
    @doronfeldman5152 10 месяцев назад +1

    It the best programming channel!

  • @vallunacoder.wecodetogether
    @vallunacoder.wecodetogether 10 месяцев назад

    the best js tutorial I have ever seen!

  • @Ankitsarwal
    @Ankitsarwal 6 месяцев назад +1

    I like the explaining way

  • @raazyaa
    @raazyaa 7 месяцев назад

    What an explanation and what a VOICE !
    thx bro !!!

  • @ФёдорСёмочкин
    @ФёдорСёмочкин 6 месяцев назад

    the best teacher, thanks bro!

  • @harshjaiswal1634
    @harshjaiswal1634 11 месяцев назад +1

    I'm following this playlist

  • @collinsestell5969
    @collinsestell5969 6 месяцев назад

    Just...beautifully explained!

  • @gauravshrmai1988
    @gauravshrmai1988 Год назад +1

    superb bro !!

  • @hongquannguyen5532
    @hongquannguyen5532 7 месяцев назад +1

    if there are 3 or 4 functions stack on eachother, would the deep inner function get access to all the outers ?

  • @juliannafotheringham7101
    @juliannafotheringham7101 8 месяцев назад

    so amazing thank you

  • @Martin958
    @Martin958 7 месяцев назад +1

    @4:17 What did you mean by return the object {increment: increment} ? Why would the function be both the property and the value?

    • @DavidFerreira-ld5gp
      @DavidFerreira-ld5gp 6 месяцев назад +2

      It's a feature of JavaScript ES6 called Shorthand Properties.

    • @bennymeister
      @bennymeister 3 месяца назад +1

      If you pass an already existing variable name into an object, it will create an entry in the object with the variable value, like this:
      const foo = 69
      const obj = { foo: foo } // { foo: 69 }
      const obj2 = { foo } // { foo: 69 }
      You see how these are ultimately just two ways of writing the same thing. One being shorter than the other

  • @AllHailLordMegatron
    @AllHailLordMegatron 6 месяцев назад +2

    it seems closure works like a class but JS has classes , so why do we use closure ? does anyone know the difference ?

    • @FahimAhamed-oc8nh
      @FahimAhamed-oc8nh 5 месяцев назад

      We can use closure for small state managements of the elements ,whereas classes are used for more complex stuff

  • @kcseanbrixd.calinao6700
    @kcseanbrixd.calinao6700 10 дней назад

    definitely just a primitive version of class. What a great pov

  • @uzma_azam
    @uzma_azam 9 месяцев назад

    Thanks Bro 😊

  • @nemesisxl6736
    @nemesisxl6736 11 месяцев назад +1

    React tutorials pls!!

  • @nebularzz
    @nebularzz 11 месяцев назад +1

    wouldn't this also be a closure
    function some_other_function(closure) {
    closure()
    }
    function some_function() {
    let message = "Hello, world!"
    let closure = function() {
    console.log(message)
    }
    some_other_function(closure)
    }
    some_function()

  • @HikaruAkitsuki
    @HikaruAkitsuki 7 месяцев назад

    At this point, I have no idea what's the purpose of class if function have this closure.

    • @SquidysTents
      @SquidysTents 5 месяцев назад

      I’m guessing it’s probably to abstract away a lot of the confusion and complexity of closures like this, but I don’t really know either haha

  • @Cinemas19
    @Cinemas19 11 месяцев назад +1

    what happens when we create lots of closures in our code?

    • @Cinemas19
      @Cinemas19 11 месяцев назад

      It slow-down our application......

    • @chiggywiggy524
      @chiggywiggy524 6 месяцев назад

      You answered your own question?