Learn Closures In 7 Minutes

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ธ.ค. 2019
  • The most infamous interview question for JavaScript has got to be explaining closures. Because of this it may seem that closures are a complex topic, but in reality the idea of closures is actually pretty simple. All you need to know about closures is they they are a mechanism in JavaScript for handling variable scope. In this video I explain in depth exactly what closures are, how to use them, and why they are important.
    🧠 Concepts Covered:
    - What closures are
    - How closures work in JavaScript
    - Why closures are important
    - When to use closures
    🌎 Find Me Here:
    My Blog: blog.webdevsimplified.com
    My Courses: courses.webdevsimplified.com
    Patreon: / webdevsimplified
    Twitter: / devsimplified
    Discord: / discord
    GitHub: github.com/WebDevSimplified
    CodePen: codepen.io/WebDevSimplified
    #Closures #WDS #JavaScript

ความคิดเห็น • 379

  • @HK-th3tu
    @HK-th3tu 3 ปีที่แล้ว +520

    SUMMARY: Closure i s "when you have a function defined inside of another function, that inner function has access to the variables and scope of the outer function even if the outer function finishes executing and those variables are no longer accessible outside of that function."

  • @scottj6296
    @scottj6296 3 ปีที่แล้ว +562

    **If you are confused about his code example, please see my 3 step explanation:**
    1. The outerFunction('outside') is called immediately when it is assigned to the variable "newFunction". (That's how it works when a function is assigned to a variable with (), if you didn't know this part, you would very confused).
    2. Upon being called, outerFunction returns the function "innerFunction(innerVariable") which re-reassigns our variable "newFunction" to be InnerFunction(innerVariable) instead of outerFunction(outerVariable).
    3. Then by calling our variable as newFunction('inside') we are calling innerFunction('inside') which runs the console.log code. The closure is that innerFunction remembers and has access to the outerVariable parameter we originally set with outerFunction('outside'). Thus it is able to console.log both 'outside' and 'inside' even though it was called with just 'inside'.
    If this helped you please thumbs up so others can see!

    • @free2idol1
      @free2idol1 2 ปีที่แล้ว +9

      thanks... it took a while to understand this concept and your explanation helps me re-confirm that what I understand is true.

    • @BibeshManandhar
      @BibeshManandhar 2 ปีที่แล้ว +1

      Thanks man 👍👍

    • @tylercode2207
      @tylercode2207 2 ปีที่แล้ว +1

      Thanks brother it really helped me

    • @Corvinade
      @Corvinade 2 ปีที่แล้ว +2

      Thanks, I was so confused when I saw that.

    • @xiaotutu0802
      @xiaotutu0802 ปีที่แล้ว +1

      great explanation,thank you!

  • @SahraClayton
    @SahraClayton 4 ปีที่แล้ว +374

    it's been 70 years and I still don't understand closures

    • @paujoan401
      @paujoan401 4 ปีที่แล้ว +9

      You are not alone.

    • @surfinbird71
      @surfinbird71 4 ปีที่แล้ว +22

      Jump to 6:27

    • @therealilyaskhan
      @therealilyaskhan 4 ปีที่แล้ว +24

      Haha okay one tip for you. If you are smart enough you would understand. Javascipt variables do not holds the values they rather holds the references to the physical memory slots in which values are contained. When variables are returned from a function , it forms a closures because the function is not returning the variables/values, the function is rather returning the references to memory slots .. That's it

    • @thedevelopergirl
      @thedevelopergirl 4 ปีที่แล้ว +1

      try having a look at this once: th-cam.com/video/ZA3ogWqNNPg/w-d-xo.html

    • @thinkingaloud7925
      @thinkingaloud7925 4 ปีที่แล้ว +14

      but javascript is only 23 or 24 yrs old

  • @canvaapplessons1224
    @canvaapplessons1224 3 ปีที่แล้ว +77

    I was confused all along but your last sentence saved me 😁

  • @zachwhite8054
    @zachwhite8054 4 ปีที่แล้ว +48

    10-second summary: 6:28

    • @atulsharma706
      @atulsharma706 4 ปีที่แล้ว +1

      OK, i am taking it since i don't understand anything else

    • @stills2359
      @stills2359 3 ปีที่แล้ว +1

      thank you lol

  • @MrTubs987
    @MrTubs987 3 ปีที่แล้ว +4

    I think I FINALLY understand closures. In fact, I found a good reason to use one today in my project. TLDR; When you need to pass a function with no parameters, but the function you want to pass has parameters. BAM, create a closure by putting the variables/parameters you need in the outer function and return a function with no parameters (just remember that returned function has access to the outer function parameters, even after it's done executing).

  • @fire_boat
    @fire_boat 4 ปีที่แล้ว +116

    It’s just a child function having access to its parents function

    • @SquaredbyX
      @SquaredbyX 3 ปีที่แล้ว +41

      There's more to it. That's actually lexical scope. Lexical scope comes into play in the concept of Closures when that lexical scope is 'closed' out, hence the term closure. A Closure is when you still have access to a lexical scope that has been closed and the values should have been garbage collected are still available to your closure / function that is still accessing them.

    • @andreadg5429
      @andreadg5429 3 ปีที่แล้ว +2

      @@SquaredbyX to see if I got it right, its like the inner scope creates a copy of the outer one for "personal use", right?

    • @geralt36
      @geralt36 3 ปีที่แล้ว +2

      @@SquaredbyX You really hit it home with that explanation. Thank you!

    • @kobe248ryant
      @kobe248ryant 2 ปีที่แล้ว

      So what the use of the closure then?

    • @fire_boat
      @fire_boat 2 ปีที่แล้ว

      @@kobe248ryant nothing just use the parent scope in the child scope

  • @kristofbalinth2071
    @kristofbalinth2071 2 ปีที่แล้ว +4

    Finally I funckin' got it. Thanks Kyle. I found myself coming back to your channel more and more when I need to clarify/understand some webdev-related stuff. Will definitely buy at least one of your courses. Keep up the good work.

  • @doniaelfouly4142
    @doniaelfouly4142 ปีที่แล้ว +6

    i always come back to this channel whenever i need a clear , simple and straight to the point explanation

  • @techuchiha6510
    @techuchiha6510 4 ปีที่แล้ว +58

    Closures are such an interesting topic that I always watch anyone or everyone coming up with an explanation for the same. This was one of the best explanations that I have come across.

  • @TheFinalsTV
    @TheFinalsTV 3 ปีที่แล้ว +3

    *personal note*
    newFunction call = (outerFunction + calling it).
    outerFunction executes, returning innerFunction while passing in "outside" as part of the accessible scope.
    newFunction then passes "inside" to the now returned innerFunction, calling it and completing the execution.
    For anyone reading, I have no idea if I'm right but this makes sense to me rn.
    Analogy note: newFunction is like the first car key turn, it activates the starter (outerFunction) which primes the engine by passing in "outside" and returning innerFunction as ready to ignite. The second turn is newFunction passing in "inside" which sends fuel, igniting the engine (calling innerFunction)

  • @kuei-chinhuang815
    @kuei-chinhuang815 3 ปีที่แล้ว +38

    Thank you, Kyle. Your explanation is so good that other people's closure videos starting making sense to me too.
    You simplify web development so successfully that I always benefit from your channel since I started learning JavaScript!

  • @christopherortega6257
    @christopherortega6257 4 ปีที่แล้ว

    Most straight forward easy to understand explanation I've seen. Thanks buddy.

  • @Amey_G18
    @Amey_G18 2 ปีที่แล้ว +1

    This closure topic was so difficult to understand at first.
    I've read it on multiple sites but this video by Kyle is really awesome and easy to understand.
    Thank you Kyle!

  • @ganeshbabu6458
    @ganeshbabu6458 3 ปีที่แล้ว +1

    Thanks for that Axios example, which no one ever has mentioned in their closure tutorial. We were using closures without even realizing it.

  • @dsvhs93
    @dsvhs93 3 ปีที่แล้ว +1

    Kyle you are awesome! Thank you for this! I’m constantly coming to your videos! Trying to learn as much as I can but really trying to understand how things work!

  • @ahlen10
    @ahlen10 3 ปีที่แล้ว

    You tried to simplify the concept from the start and made your point clear. Thank you.

  • @viniciusborgesdelima2519
    @viniciusborgesdelima2519 4 ปีที่แล้ว

    Excelent explanation, thank you a lot, I was having trouble trying to understand Closures, and this video fit like a glove!

  • @marcotorres899
    @marcotorres899 8 หลายเดือนก่อน

    The last example was amazing! Thank you for taking the time to make this!!

  • @snake1625b
    @snake1625b 2 ปีที่แล้ว +1

    Great video. I watched this a month before my interview but forgot the concept so I recommend y'all watch it again every now and then

  • @aashayamballi
    @aashayamballi 4 ปีที่แล้ว +4

    That was simple, because you made me understand it in a simpler way. Thanks Kyle. 😊

  • @lucasoliveira-xs5yh
    @lucasoliveira-xs5yh 2 ปีที่แล้ว

    Man, congrats about your videos. I passed in a interview using your videos about React to learn how to build an app and now I'm using again. Continue this job.

  • @zarakikenpachi1773
    @zarakikenpachi1773 11 หลายเดือนก่อน +1

    Closures allow functions to access variable values, declared in another (parent) function, even after the parent function has finished it's execution.
    In js, the variables within a function are accessible only within itself and only for as long as the function is executing.
    You can understand this, by creating a new variable and assigning the parent function to that variable. Then do 'console.dir(new variable).
    Try below example :
    const add = function(){
    let num = 1;
    return function() {
    num++
    return num;
    }
    }
    const addFunc = add()
    console.dir(addFunc)
    in the console > click on 'f anonymous()' > click on 'scopes' > click on 'closure'
    In the above example, the addFunc function is declared in the global scope. Hence, it should not be able to access the variable in the add function, because variables can only be accessed within the scope and and while the scope still exists (as long as the function is running). But because closure preserves the value of the variable even after the parent function (add) has finished execution, the other functions (addFunc) that are that are using the parent function are able to access the variable.
    Hope that helps. :)

  • @GuitarreroDaniel
    @GuitarreroDaniel 3 ปีที่แล้ว

    The best explanation on TH-cam, thank you very much. I don't know why ppl keep complaining about not understanding this.

  • @BusinessDevelopmentSolution
    @BusinessDevelopmentSolution ปีที่แล้ว

    i have tried so many videos on youtube but none of them explained in the way you did, thank you so much for a nice video.

  • @bohdanartemenko
    @bohdanartemenko 4 ปีที่แล้ว +9

    Kyle, thanks to your videos I learned not only JS but English too.
    I don't know how but you clarified and simplified all info in your videos so well, hope so youtube algorithm make you famous, good luck :)

    • @WebDevSimplified
      @WebDevSimplified  4 ปีที่แล้ว +3

      Thank you so much! I'm really glad I can help.

  • @lone-warrior-13
    @lone-warrior-13 3 ปีที่แล้ว

    i love you and your channel i hadn't seen anyone explaining js closures as clear as you

  • @reidwilliamson6477
    @reidwilliamson6477 2 ปีที่แล้ว +1

    Really good content man. Thanks for explaining it clear and concise!

  • @sledge9763
    @sledge9763 4 ปีที่แล้ว

    This is great, appreciate you not making it more complicated than it needs to be. Thanks!

  • @brownboyintokyo7368
    @brownboyintokyo7368 2 ปีที่แล้ว

    You are a legend, always glad to come back to these videos and brush up the fundamentals again

  • @mubashirali6835
    @mubashirali6835 4 ปีที่แล้ว

    You made this concept very easy. Thank you Kyle.

  • @Life.Love.Locs.
    @Life.Love.Locs. 3 ปีที่แล้ว

    Thanks for this! I watched this after a lecture and watching a few other videos that confused me... I finally got it!

  • @pardeepporia5367
    @pardeepporia5367 3 ปีที่แล้ว

    Great job buddy, I like the sequence you presented it in: simple example, better example and then use case.

  • @iam-Inder
    @iam-Inder 4 ปีที่แล้ว

    I watched many videos on closures but everybody trying to explain too much and somewhere lose the real thing. Your example and explanation are good. I got the concept. thank you for this video.

  • @elhamsalamat772
    @elhamsalamat772 ปีที่แล้ว

    Thank you very much Kyle for the nice explanation. Closure was not clear exactly to me until I watched your video, That makes the understanding more easier

  • @noideaofhowcallme
    @noideaofhowcallme 2 ปีที่แล้ว

    Explained very well and a VERY good example! Thanks!

  • @atulkamble557
    @atulkamble557 2 ปีที่แล้ว

    You make everything super easy..! Thanks a lot.

  • @athira151292
    @athira151292 ปีที่แล้ว

    This explanation was great! Thankyou for the video.

  • @lefosg
    @lefosg ปีที่แล้ว

    6:28 after watching the video once, repeat this for 5 times and you're good. Once more, thank you Kyle :)

  • @mruduladdipalli5417
    @mruduladdipalli5417 4 ปีที่แล้ว +6

    5:07 - innerfunction() will only have access to those variables of outerfunction() which innerfunction() wants to use it. , when we do console.dir( newFunction ) , we can see [ [Scopes] ] Array , which has Closure Object with the variables that would be used by innerfunction() only , not all variables of outerfunction

  • @lakshmi-dev
    @lakshmi-dev 2 ปีที่แล้ว

    Very clear information. Thanks for sharing. Was reading many sources, but none were so clear and understandable. Can you please make a video on 'JS event bubbling'

  • @sebiporini
    @sebiporini 3 ปีที่แล้ว

    I am on my way to understand this.
    Thanks a lot for helping me, i think i cant understand this at 100%, but i will not give up.
    Im learning a lot with you and your youtube channel.
    You got a new subscriber here.
    Cheers! And thanks again!

  • @RodrigoButta
    @RodrigoButta 4 ปีที่แล้ว +2

    So well explained! I'm fan of your videos since saturday! Thank you!! May be one thing missing in this one is to explain what happens when an outside variable gets modified inside a function (because i thinks it's not like php where you have to pass it as a reference and all that). Anyway, you rule. One of the best channels for learning! And the short video distribution is awesome to watch them at any time of the day.

    • @WebDevSimplified
      @WebDevSimplified  4 ปีที่แล้ว

      Thank you so much. I have a video on pass by reference vs pass by value in JS that you can checkout that explains exactly this concept.

  • @VishalSharma-fm6nr
    @VishalSharma-fm6nr 2 ปีที่แล้ว

    This made closures so simple. Thanks!

  • @thebrijpatel
    @thebrijpatel 2 ปีที่แล้ว

    Ooo boy, this helped me understand the concept. Thanks !!

  • @zerosecond9739
    @zerosecond9739 2 ปีที่แล้ว

    great explanation ........ keep on uploading more concepts videos...
    You are gem to people who want to learn web development on own.....

  • @emekatimothyiloba699
    @emekatimothyiloba699 ปีที่แล้ว

    Kyle is good when it comes to explanation. Thank you

  • @Anne-kz4fi
    @Anne-kz4fi 3 ปีที่แล้ว

    Thank you. I think I understood. I was expecting closures to be something more "visible", a specific keyword, or a line where I could comment next to it. But if I understood it right, it's more like a concept, like a behavior of an inner function.

  • @s5006
    @s5006 4 ปีที่แล้ว +2

    i was learning on Udemy and i got some trouble to understand ...after watching this video it was easy peasy to understand ... thanks so much

  • @melissamoloney6312
    @melissamoloney6312 4 ปีที่แล้ว

    That was very helpful! Thank you Kyle :)

  • @cristianbonomo5042
    @cristianbonomo5042 4 ปีที่แล้ว

    Watched 1 minute of your video and understood closures. Thanks!

  • @harrygill6169
    @harrygill6169 3 ปีที่แล้ว +2

    The first example you gave is not due to closure but due to scope chaining. Closures come in play when the execution context has finished but the variables still stay around. In first example we still have global execution context. But thanks for video always learn something new everyday.

  • @dopetag
    @dopetag ปีที่แล้ว +2

    Nice!
    Some useful implementations and examples would be great for part 2 :)

  • @draicor
    @draicor 2 ปีที่แล้ว +2

    Good explanation mate, I subscribed!. tip: You really should start using the semicolons while writing javascript code, and avoid using anonymous functions, you should name those functions even if they are IIFEs or arrow functions, it makes debugging easier since the function name shows up on the errors later..

  • @hargunbeersingh8918
    @hargunbeersingh8918 2 ปีที่แล้ว +1

    I learn about closures on MDN, highly recommended!

  • @mikedelta658
    @mikedelta658 ปีที่แล้ว

    Finally, I am able to understand closure. Thanks!!!

  • @syedibadulhassan9307
    @syedibadulhassan9307 4 ปีที่แล้ว

    Great explanation, thanks bud!

  • @johnson554671
    @johnson554671 2 ปีที่แล้ว

    Thx for such a great explanation!

  • @_tu_shark
    @_tu_shark 3 ปีที่แล้ว

    Nicely explained..! Thank You ..!

  • @Ravipenugonda
    @Ravipenugonda 3 ปีที่แล้ว

    super and clear explanation. Thank you

  • @abdullatheefr2286
    @abdullatheefr2286 ปีที่แล้ว

    You are awsome. clear n crisp explaination.

  • @iarchetype
    @iarchetype 3 ปีที่แล้ว

    After 10 thousand videos, I was finally able to wrap my head around this passing of param straight to the inner function and not to the outer one, starting at: 3:48

  • @abdelrahmanmagdy3706
    @abdelrahmanmagdy3706 2 ปีที่แล้ว

    Thank you so much Kyle for your outstanding explanation. I have a small comment, I think closures have different behaviors when you are using var and let right ?

  • @madhanmanick3455
    @madhanmanick3455 4 ปีที่แล้ว

    Hey dude !!! Awesome and crisp explanation......

  • @iiilililiklku
    @iiilililiklku 4 ปีที่แล้ว

    awesome... I finally understood what closure is

  • @stith_pragya
    @stith_pragya 5 หลายเดือนก่อน +1

    Thank You So Much for this wonderful video..........🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻

  • @milindkhadse556
    @milindkhadse556 3 ปีที่แล้ว

    This is very helpful. Thank you

  • @helloworld4475
    @helloworld4475 4 ปีที่แล้ว

    Hi bro! Thanks for all the easy-understanding videos, and could you please make a video like ?

  • @pavloshchur3684
    @pavloshchur3684 3 ปีที่แล้ว

    Great explanation!

  • @prathameshmali3888
    @prathameshmali3888 4 ปีที่แล้ว

    Thanks man, really helpful.

  • @harishharidas8969
    @harishharidas8969 3 ปีที่แล้ว

    Read atleast 10 articles to understand closures.. but this one saved me

  • @muhammadinaammunir6761
    @muhammadinaammunir6761 ปีที่แล้ว

    Today I had an interview and the interviewer asked me about closure. I did not give a proper answer and now I am here :).

  • @srkvocals
    @srkvocals 2 ปีที่แล้ว

    very simple superb... thanks

  • @nickfan7867
    @nickfan7867 3 ปีที่แล้ว

    Thanks for the explanation.

  • @naoko1927
    @naoko1927 4 ปีที่แล้ว

    I do hit the like button every single video of you! btw, please make some videos about deployment, I really confused about some extra files like .editorconfig, Procfile, Yarnrc.yml, config files..etc. I'm looking forward to your videos. Fan from Vietnam !

  • @kareemmoro2935
    @kareemmoro2935 2 ปีที่แล้ว

    That was a good explanation..nice

  • @kolyxix
    @kolyxix 3 ปีที่แล้ว

    2:34." When most people think of closures they think of function inside a function." That has been the problem for me. Thanks for the clarification

  • @billyjayamunga
    @billyjayamunga 2 ปีที่แล้ว

    Great video! really simplifies the concept. What I still can't quite understand is how calling newFunction sets the inner variable. :/

  • @KajalMajumder
    @KajalMajumder 3 ปีที่แล้ว

    very nice explanation.

  • @sankalparora9261
    @sankalparora9261 3 ปีที่แล้ว

    Summed up great at the end.

  • @dinarboyo3658
    @dinarboyo3658 3 ปีที่แล้ว

    thanks it was really helpful

  • @NirmalGhosh-yn7ov
    @NirmalGhosh-yn7ov 2 ปีที่แล้ว

    Thanks bro.. I understood.

  • @dean6046
    @dean6046 4 ปีที่แล้ว

    Thank you bro!

  • @dayibdesign1686
    @dayibdesign1686 4 ปีที่แล้ว +3

    kyle resisted the terminator, now he changed the mission to simply web dev!!

  • @iHidden1
    @iHidden1 4 ปีที่แล้ว +2

    Tomorrow i have an interview. I was thinking what i don't understand or know that well and i was searching right now to see what i can find. Closures were the first item on the list. Are you reading your subscribers minds? Thank you for this tutorial. Other items on list are call&apply and bind.

    • @ruslan2676
      @ruslan2676 4 ปีที่แล้ว

      Good luck with the interview!

  • @saputrauta09
    @saputrauta09 4 หลายเดือนก่อน

    Thankyou so much!

  • @BruceArmstrong09121997
    @BruceArmstrong09121997 4 ปีที่แล้ว +1

    Loving this community

  • @haraldcarlsten6238
    @haraldcarlsten6238 2 ปีที่แล้ว

    Great video! Exactly! Why make it so complicated. An inner function has access to the outer functions variables and scope even after it has been called.

  • @EmadElSammad
    @EmadElSammad 4 ปีที่แล้ว +56

    Watched the vid 3 times and still not getting it. I feel stupid

    • @evan5854
      @evan5854 4 ปีที่แล้ว +8

      No, don't feel stupid. It's hard to wrap your head around closures. From my experience so far, not much programming is intuitive. The takeaway at 6:28 is what you should consider imo

    • @yadneshkhode3091
      @yadneshkhode3091 4 ปีที่แล้ว

      read the book of kylie Simpson - you don't know javascript

    • @thedevelopergirl
      @thedevelopergirl 4 ปีที่แล้ว +1

      Try looking at this once: th-cam.com/video/ZA3ogWqNNPg/w-d-xo.html
      I hope it will help.

    • @Yogaboarder
      @Yogaboarder 4 ปีที่แล้ว +1

      th-cam.com/video/nG4tqI-9K3o/w-d-xo.html

    • @therealilyaskhan
      @therealilyaskhan 4 ปีที่แล้ว +3

      Thats because the man in the video himself is confused

  • @asadbilal591
    @asadbilal591 3 ปีที่แล้ว

    Man,why are you not getting views,so underrated..

  • @heyyou494
    @heyyou494 4 ปีที่แล้ว

    Thank you sensei

  • @alpstinger5083
    @alpstinger5083 3 ปีที่แล้ว

    Very nice!

  • @Farrukhw
    @Farrukhw 4 ปีที่แล้ว

    In other languages, the global variables are accessible everywhere.
    Variables in parent functions are accessible to inner functions.
    Variables in parent classes are accessible in the class functions as well as in child classes and their functions. (if set up as public or protected).

  • @filip23128
    @filip23128 2 ปีที่แล้ว

    Thanks Kyle!

  • @PabloGnesutta
    @PabloGnesutta 4 ปีที่แล้ว

    The thing that is very confusing with this example is that the outer function RETURNS a function. I needed a long time to understand it but finally did.
    After the statement: const newFunction = outerFunction('outside') the VALUE of newFunctio will be what is inside the RETURN clause, so, de VALUE of "newFunction" will be:
    "function innerFunction(innerVariable) {
    ....console.log('outer variable', 'outside');
    ....console.log('inner variable', innerVariable);
    }
    The confusing part is that when the function is returned, the part that logs "innerVariable", no longer logs innerVariable, it logs 'outside' instead because it is what has ben passed as parameter when the outer function was called.
    So, when you execute newFunction('inner') you are executing the function that has been returned the first time.
    So you are basically executing this:
    newFunction('inner'){
    ....console.log('outer varaible', 'outside'); //this 'outside' is a literal value (not a variable) assigned when newFunction was assigned
    ....console.log('inner variable', 'inner'); //this 'inner' was passed as a parameter when calling newFunction('inner');
    }
    I hope this calrifies.
    The whole closures thing is not that complicated. Basically, you can always access variables/functions/etc that are in a higher scope than you are standing. You could see it as if the function/variable/etc is LESS INDENTED (further to the left) in your code, you can access it.

  • @maxlong1374
    @maxlong1374 3 ปีที่แล้ว +3

    I am going to download all your video and tranform them into mp3 audios and listen to them to fall asleep at every night. I hope you don't mind.

  • @jjjj5452
    @jjjj5452 ปีที่แล้ว

    I finally understand it after your explanation. You should do a udemy course

  • @JamesJon1187
    @JamesJon1187 ปีที่แล้ว

    Thank You!

  • @Agustin-jo8mv
    @Agustin-jo8mv 3 ปีที่แล้ว

    Wow I think this just clicked for me. Took me watching this a few times but the inner/outer variables seem to have helped.

  • @kemal_ozturk
    @kemal_ozturk 4 ปีที่แล้ว +7

    The confused look in the thumbnail 🤣