Programming Terms: Closures - How to Use Them and Why They Are Useful

Sdílet
Vložit
  • čas přidán 7. 03. 2016
  • In this programming terms video, we will be looking at the term "Closure". We will learn what a closure is and why they are useful. We will look at examples in both Python and JavaScript. In Python, understanding closures helps us understand common language features like decorators. And in JavaScript, closures will allow us to better understand callback functions and much more. Let's get started...
    The code from this video can be found at:
    github.com/CoreyMSchafer/code...
    ✅ Support My Channel Through Patreon:
    / coreyms
    ✅ Become a Channel Member:
    / @coreyms
    ✅ One-Time Contribution Through PayPal:
    goo.gl/649HFY
    ✅ Cryptocurrency Donations:
    Bitcoin Wallet - 3MPH8oY2EAgbLVy7RBMinwcBntggi7qeG3
    Ethereum Wallet - 0x151649418616068fB46C3598083817101d3bCD33
    Litecoin Wallet - MPvEBY5fxGkmPQgocfJbxP6EmTo5UUXMot
    ✅ Corey's Public Amazon Wishlist
    a.co/inIyro1
    ✅ Equipment I Use and Books I Recommend:
    www.amazon.com/shop/coreyschafer
    ▶️ You Can Find Me On:
    My Website - coreyms.com/
    My Second Channel - / coreymschafer
    Facebook - / coreymschafer
    Twitter - / coreymschafer
    Instagram - / coreymschafer

Komentáře • 307

  • @riverland0072
    @riverland0072 Před 4 lety +444

    "Therefore, in simple terms: A closure is an inner function that remembers and has access to variables in the local scope in which it was created even after the outer function has finished executing"... It is absolutely impossible for this guy not to make heaven

  • @kickbuttowsk2i
    @kickbuttowsk2i Před 4 lety +55

    okay, let's watch the decorators video at last. You rock, Corey.

  • @varunkumar_vk
    @varunkumar_vk Před 4 lety +41

    "My hope here is that, by seeing this in two different languages, it will really knock home the concept, rather than just the syntax of the language". Absolute brilliance!

  • @satoshinakamoto171
    @satoshinakamoto171 Před 4 lety +55

    i dont think people say this enough, but your channel is probably one of the most valuable programming tutorial channels in YT. i keep learning from this channel and i all i can give is my appreciation.
    thank you.

    • @dineshraj78
      @dineshraj78 Před 10 měsíci

      true, i felt the same! great help!

  • @supermariosunshine64
    @supermariosunshine64 Před 6 lety +140

    So, if I got it right, closures are when a function remembers the environment it was created it, specifically the variables around it.

    • @coreyms
      @coreyms  Před 6 lety +62

      Yes, that is a good concise description.

    • @samiullah9154
      @samiullah9154 Před 3 lety

      Thanks you just nailed it 😇

    • @samiullah9154
      @samiullah9154 Před 3 lety +4

      You nailed it almost 3 years ago😂

    • @hemanth6951
      @hemanth6951 Před 3 lety

      Looks like normal human childrens behaviour to remember which city 🏙️ born

    • @NKATIKADALAVIDYASRI
      @NKATIKADALAVIDYASRI Před 3 lety

      Some clarify me with another example - So that I will get it 100% please....

  • @ossenaar
    @ossenaar Před 6 lety +70

    Best (Python) teacher who explain concepts easily and clear. As a beginner programmer, I read and study Python concepts in books and jupyter notebook samples. But, for certain concepts, I need additional visual explanations and Corey's videos always help me out greatly! In eBooks, I always highlight important concepts with a note link to his CZcams video to revisit the videos later.

  • @mijaelwatts
    @mijaelwatts Před 6 lety +31

    Man, I tried to learn Closures last year and failed miserably. Today I gave it another try(this time with ur video) and now I totally get it. Thank you very much man. God Bless!!!

  • @Max-my6rk
    @Max-my6rk Před 6 lety +83

    Thanks very much. This is the only video explaining Closures the way it should be.... very clear and easy to understand! U r truly awesome!

  • @souranumaji4213
    @souranumaji4213 Před 3 lety +7

    Video on "First Class Functions" is the base. Once you clear that idea, understanding closure becomes much easier... Corey you are genuine and genius teacher, a teacher everyone deserves to have at least once in their life.

  • @nicholaszustak768
    @nicholaszustak768 Před 7 lety +5

    Completely forgot these from my classes; this video helped me remember and learn it way more in depth! Thank you

  • @oregonbry
    @oregonbry Před 6 lety +5

    Thank you! After all these years, I feel like I am finally starting to understand Closures. Awesome!

  • @santoshkc1922
    @santoshkc1922 Před 4 lety +10

    You are the only person who can make me understand Python!!! Your excellent methodology of making the concepts clear and those top notch examples gives a break through to any person willing to learn the language. Thank you a lott!! God bless you

  • @neilwaghmare6283
    @neilwaghmare6283 Před 4 lety +3

    I get it finally, a closure is a inner function that has access to variables within the local scope even after the outer function has finish executing.
    Thanks a lot and keep up the good work!

  • @RalphAlberg
    @RalphAlberg Před 3 lety +6

    Corey's videos are always excellent - his explanations are clear and he makes complex topics very accessible. Thank you!

  • @amanmaldar
    @amanmaldar Před 6 lety +3

    4:36 That's what a close it. I am yet to complete watching video. But just the way you put forward these concepts, always keeps me going through your videos. Thank you sir.

  • @tede1838
    @tede1838 Před 3 lety

    after a few CZcams vids and reading a couple of Python books, i finally found someone who explains Closures and Decorators to a level that helps me to completely understand them and their uses. thanks for your efforts Corey

  • @ratonmagico
    @ratonmagico Před 5 lety +3

    When I'm coding in Python and come across with something I don't know or I don't remember quite well I come back to your videos. So clear and insightful at the same time!

  • @DanCanning
    @DanCanning Před 5 lety +8

    Never mind first class functions. This was a first class explanation. You closed off my confusion nicely. :)

  • @BusinessDevelopmentSolution

    I have no words to thank you because this was a very tricky concept that I was trying to learn for last 2 days in dart and your video make me able to understand what exactly closure does, thank you so much

  • @kidautism
    @kidautism Před 3 lety

    I absolutely love it that you demonstrate the concept in two different languages

  • @scuti7073
    @scuti7073 Před rokem +1

    free variable is the variable that is not defined within the inner function but is defined in the enclosing function. It can still be accessed in the enclosed function.
    "A closure is an inner function that remembers and have memory of the variables from the local scope from which it was created created (this includes arguments passed to the parent function)- even after the outer function has finished executing"- 4:50
    A closure closes over the free variables from their environment- defined outside of the function/

  • @bhaktitarang04
    @bhaktitarang04 Před 4 lety +2

    Wow man, the teaching skills that you possess is unmatchable

  • @rabbanimunna6992
    @rabbanimunna6992 Před 2 lety +4

    I like the way you explain complex topics in a easy way.

  • @pumpkinking715
    @pumpkinking715 Před 8 lety +6

    Great video! I really liked the examples you used. They really helped to demonstrate actual use cases for closures. I am looking forward to the python decorator tutorial

  • @iftrejom
    @iftrejom Před 3 lety

    I spent the entire day trying to figure out what closure and failed miserably, and then this guys clears it up in 5 minutes. Great job, man, thank you a lot.

  • @gatsby335
    @gatsby335 Před 3 lety +14

    I am here from the *Decorators!*

  • @d_learner7573
    @d_learner7573 Před 6 lety +1

    Another great video. This was one of the hardest subjects for me and I understood it very well. Thank you Corey.

  • @JG-mw7yd
    @JG-mw7yd Před 4 lety +4

    Hey Corey, recently stumbled on your videos and I'm so happy I did, thanks for taking the time to make such great tutorial videos!
    Also, for those with slower auditory processing like me, set the playback to 0.75 speed, it is perfect!

  • @Benjiizus
    @Benjiizus Před rokem

    dude this is actually crazy how easy it gets when you understand it
    Thank you.

  • @rrichc
    @rrichc Před 4 lety +1

    Thank you for this explanation! Great approach in making the video language agnostic. I came across this topic in studying Dart with Flutter where closures and anonymous functions are used frequently and this made things clear.

  • @simonchung9813
    @simonchung9813 Před 6 lety +1

    Excellent video, Corey. Explanation is concise and the code snippets effectively demonstrate the the concepts of closures.

  • @DracoWF
    @DracoWF Před 6 lety

    Man, thank you! Googled everywhere with no luck and finally found you and understood closures ;)

  • @bErKcorner
    @bErKcorner Před rokem +1

    The way I prefer to remember this concept:
    The outer function "closes over" an inner function, therefore it's a closure. While doing so, it "injects" its local scope into the function being closed. So the function that is returned will be executed with the injected state every time it is called.

  • @Trippykiyay
    @Trippykiyay Před rokem

    You are the best, I have been following your channel for years, and I always come back to your videos.

  • @gauthamambethkar4483
    @gauthamambethkar4483 Před 3 lety

    Thanks Corey. Nobody can explain this the way you do.

  • @josefh8782
    @josefh8782 Před 4 lety +5

    Another great video. Though a complicated topic. I understand how they work from your examples, but I'd like to know more about when and why we would need to use these. It's one thing to understand how these things work technically, but its another leap in understanding to know when and why to use a certain approach to solve a problem.

  • @user-lf1br3pf6m
    @user-lf1br3pf6m Před 6 lety +1

    Those are 3 great examples. And I like your explanation where you say that a closure encloses the outer free variables inside the inner function (paraphrasing).

  • @Indraw705
    @Indraw705 Před 5 lety +1

    I really like the way you represent all those things in very easy manner

  • @ratikantasamal3201
    @ratikantasamal3201 Před rokem

    I have recommended your channel to a lot of my colleagues over the years

  • @ermaolaoye
    @ermaolaoye Před 4 lety +1

    Thank you for making these wonderful videos! They're really helpful when I tried to understand these concepts!

  • @GrubenM
    @GrubenM Před 5 lety +1

    Very helpful concretization of a pretty abstract term, thanks!

  • @BanibrataDutta
    @BanibrataDutta Před 3 lety

    Amazing explanation. Having read and seen other explanations, can vouch for this one as being the one that I found understandable.

  • @donepudiaditya6643
    @donepudiaditya6643 Před 5 lety +1

    Awesome tutorials. The greatest Python teacher i must say

  • @nickschneider101
    @nickschneider101 Před 2 lety

    Really great video man. Helped it click for me with deeper understanding where other videos couldn’t. Thanks!

  • @tongliu1076
    @tongliu1076 Před 5 lety +2

    Wow. Couldn't understand better than after watching this great video!

  • @akira_asahi
    @akira_asahi Před rokem

    Thank you for the video. I am grateful for your time and contribution. Kind regards, Akira.

  • @IrshadKhan-vk8rn
    @IrshadKhan-vk8rn Před 3 lety

    All My interview for The MNC interviewer ask what is closure i explained all as i remembers and finally i am all in previous year. Even Interviewer Knows About You Corey and we discuss how awesome your videos are ...:-) Currently working there have been 1 year and in core development team thanks corey again.

  • @jixuancheng
    @jixuancheng Před 6 lety +1

    I really like this example...thank you very much

  • @bulldawg4498
    @bulldawg4498 Před 4 lety +1

    Good job! Simple and precise ... Thanks!

  • @chronicfantastic
    @chronicfantastic Před 8 lety +2

    Your videos are fantastic, thanks a lot.

  • @saimanojnandam3211
    @saimanojnandam3211 Před 6 lety

    You are the best teacher I've seen

  • @Dj.julien.b
    @Dj.julien.b Před 5 lety +1

    Very useful ! I love your videos I learn so fast! :) thank you for making this golden content you provide :)

  • @kwiky5643
    @kwiky5643 Před rokem

    well explained and easy to understand for beginners

  • @haos4574
    @haos4574 Před 2 lety

    Brilliant selection of examples, you made me understand! Now I feel I am evolved!

  • @alejandronieto576
    @alejandronieto576 Před 3 měsíci

    Great video. Thanks a lot from Argentina.

  • @leeritenour
    @leeritenour Před 5 lety +1

    Outstanding! Thank you so much!

  • @Qornv
    @Qornv Před 7 lety

    Your explanations and video quality are top notch

  • @noamills3458
    @noamills3458 Před 2 lety

    Such a helpful video! Here's a heuristic I used to help understand why we need to set my_func = outer_func() in order to execute the inner function instead of just calling outer_func().
    outer_func() (in the second example where we return inner_func instead of inner_func()) returns, but does not execute a function. If you want to execute it, you might want to call outer_func()() but that syntax is illegal, so we set outer_func() to the variable name my_func so we can call my_func() with just one set of parentheses. Thinking of an illegal function with double parentheses and re-writing it using legal syntax helps me conceptualize why we use my_func.

  • @timmyl9361
    @timmyl9361 Před 27 dny

    Thnx dude. This is all I needed to understand it

  • @woody5012
    @woody5012 Před 5 lety +1

    Great video, well explained with good examples. :)

  • @link6563
    @link6563 Před 2 lety

    Every video, got to watch another video. This is an endless while loop

  • @jagmeetsond6075
    @jagmeetsond6075 Před 2 lety

    Top Video,really focuses on understanding.

  • @ignaciomoore9363
    @ignaciomoore9363 Před 4 lety +2

    cheers mate, helped out a lot

  • @dinastark1088
    @dinastark1088 Před 3 lety +1

    Amazing Explanation bro

  • @aparna1498
    @aparna1498 Před 2 lety

    super cool video, finally understood closures :)

  • @TrueHeresy
    @TrueHeresy Před 4 lety

    This video made it click, thank you!

  • @jhgfdjhgfdhdjfjhd6721
    @jhgfdjhgfdhdjfjhd6721 Před 5 lety +1

    Thanks so much for your efforts

  • @shady4tv
    @shady4tv Před 4 lety +1

    The amount of function passing in the last example was nuts haha.
    it took me writing the code out and writing my own comments plus reading out loud to fully follow the logic here.
    so if I understand it correctly - add_logger = logger(add) takes the add function (NOT EXECUTED) as a parameter to the logger function (which also just passed the function without executing it). Since the logger function was called using the brackets "()" it was executed and returned the inner function (log_func) because of the return log_func at the end of the logger function. But because of closures it remembered that you passed in the add function. So when you executed add_logger(3, 3) it passed the add function into the log_func and executed the add function with the supplied arguments within the print function.
    just wow - that is a brain twister.

  • @ganeshjayaraman2588
    @ganeshjayaraman2588 Před 7 lety

    Superb Video sir .. Thanks for explaining the wiki's definition with an example .. Really helped me :)

  • @marcc1179
    @marcc1179 Před 3 lety

    Thank you! You are a great teacher!

  • @Lahiru_Udana
    @Lahiru_Udana Před 5 lety +1

    Thanks for your effort

  • @Thomas_Grusz
    @Thomas_Grusz Před 6 lety

    Thanks, very good explanation!

  • @subhasish22
    @subhasish22 Před 6 lety +1

    Really nice video. Very well explained.

  • @maltepedersen9180
    @maltepedersen9180 Před 5 lety +3

    Brilliant! It finally starts to make sense, what closures actually are :) Thank you, for a very pleasant and informative video.

  • @nasenblick
    @nasenblick Před rokem

    Thanks for another great video that explains the mechanics, not just syntax. What I would like to understand better: What are real world use cases in which to use closures. Or in other words: In my problem solving efforts before writing code, what are patterns that call for closures.

  • @MichaelJoHarte
    @MichaelJoHarte Před 3 lety

    Another great video! Thanks again.

  • @AsavPatel
    @AsavPatel Před 7 lety

    one of the best videos on closures. CLEAN and CONSICE. keep up the good work +Corey Schafer (y)
    I have one request, can you do a video on "Variable bindings (early vs late binding) in python" Thanks!

  • @badr_mo
    @badr_mo Před 7 lety

    My Savior...Thaaanks so much for this simplicity...

  • @sriharivaila7276
    @sriharivaila7276 Před rokem

    Thanks was very very helpful.

  • @Jo-id9zm
    @Jo-id9zm Před 7 lety

    Thanks a lot, man! Very useful.

  • @hubertcombomarketing2693

    Good as always. Thanks.

  • @stillinmusic
    @stillinmusic Před 6 lety +1

    Thank you!

  • @amangupta8137
    @amangupta8137 Před 6 lety

    thanks well explained brother

  • @DivyanshuBansal
    @DivyanshuBansal Před 5 lety +1

    Hi Corey, I really like your videos. You explain everything in a very elaborated manner and that too with practical examples which helps in getting deeper insights and developing intuition.Keep the good work up.
    Also, Please upload more videos of Bronx, haven't seen his new videos.PS-> his expression in running late video still makes me smile( I've watched it multiple times). :-) :-)

  • @Colstonewall
    @Colstonewall Před 8 lety

    Enjoyed it, thanks.

  • @sallaklamhayyen9876
    @sallaklamhayyen9876 Před 6 lety

    great explanation thanks you

  • @negarhosseini8888
    @negarhosseini8888 Před 4 lety +1

    thank you! thank you!

  • @bassmaiasa1312
    @bassmaiasa1312 Před 3 lety

    It's similar to nested looping to me. outer function(arg) ~ item i of list A, then inner function(arg) ~ item j of list B. Gives you flexibility/control over the context of the inner function.

  • @moneeshkumar1838
    @moneeshkumar1838 Před rokem

    Great explainer

  • @prmurali1leo
    @prmurali1leo Před 3 lety +1

    no one can explain like him

  • @ThePHIWO
    @ThePHIWO Před 7 lety

    awesome stuff... thanks dude

  • @mashraful5065
    @mashraful5065 Před 4 lety

    Daaaaaaaaaaaaaamn man Corey is a beast

  • @premkumark7157
    @premkumark7157 Před 3 lety +1

    Hi Mr. Corey, Please make videos for data structures and algorithms using Python. Its hard finding tutorials for DSA in python. I believe i can understand the concepts easily if you teach the DSA.

  • @omnesomnibus2845
    @omnesomnibus2845 Před 4 lety +4

    Imagine yourself playing a video game where you can get a certain gun, but it can have different kinds of ammunition. Heat seeking, explosive, dimension opening, whatever. In this case, the inner function is like the gun, and the variables that are put into it when the outer function is called is like the ammunition. You are calling for a specific gun already loaded with some kind of ammunition. Or, maybe a better way of putting it is that the outer function adds mods to the base gun, like a specific kind of stock, a sight, a longer magazine, etc. Then when you call the outer function it gives you this modified gun. When you now use that, you put in the ammo, which is the arguments given to the inner function.

    • @marflage
      @marflage Před 4 lety +1

      That was actually a pretty good way to put it. Thanks!

  • @sarfarazahmed6249
    @sarfarazahmed6249 Před 6 lety +1

    I owe you so much as I learnt most of my python from you.
    I just got confused between firstclass function videos and closure video.
    Just to confirm,
    Do you mean if I assign function to variable like you did in first video. It means first class function.
    whereas if you function takes function as argument but returns function with parenthesis which can be executed later and it remembers the value of variable than its called higher order function.
    and closure is where you take function as argument to other function which returns some inner function.
    Please pardon me if I sound stupid here... :)

  • @dhanakrishnamaharjan3536

    You are a GEM.

  • @stephenpaek9175
    @stephenpaek9175 Před 5 měsíci

    Excellent

  • @Retrosenescent
    @Retrosenescent Před 4 lety +5

    Extremely well-explained tutorial, but I still can't figure out why I would ever want to use this..

    • @pipertripp
      @pipertripp Před 3 lety +1

      His last example with the logging is a good example, though as he says, decorator would be the more pythonic way (although it's still using a closure as well). The way that he's using the logging wrapped around the other two functions, add and subtract, show how you can apply logging to any arbitrary function in your application without having to replicate all of the logging machinery in every function. It makes your code way more compact and also far more maintainable.

  • @alinandrei6555
    @alinandrei6555 Před 3 lety

    Would've liked to see a more technical explanation of closures, including more concepts like nonlocal, the @wraps as an intro probably. Thank you!

  • @jasonreviews
    @jasonreviews Před 8 lety

    Good stuff!