Learn Closures In 13 Minutes

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ม.ค. 2025

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

  • @usmanquickcode
    @usmanquickcode 6 หลายเดือนก่อน +70

    I just gave my interview and in this interview they asked me about closures. which ofcourse i have no idea. I have used it but no idea what is called. and i open my youtube and boom you are there. really like the simple explaination.

    • @anothermouth7077
      @anothermouth7077 6 หลายเดือนก่อน +9

      Those know-it-all interviewers always play with these gotcha questions which are not even practical anymore

    • @looming_
      @looming_ 6 หลายเดือนก่อน

      @@anothermouth7077closures are pretty important tho

    • @youarethecssformyhtml
      @youarethecssformyhtml 6 หลายเดือนก่อน +7

      Such useless interview questions. They really need to ask about the job instead of stupid shit that you're not gonna use 95% of the time

    • @jessecalato4677
      @jessecalato4677 6 หลายเดือนก่อน +5

      ​@thecoolnewsguy you will use closures constantly though, and terminology is important for proper communication...

    • @youarethecssformyhtml
      @youarethecssformyhtml 6 หลายเดือนก่อน

      @@jessecalato4677 I know. Yes closures are used extensively but asking about the var gotcha in a loop is just stupid like who's gonna use var in 2024 for a new code?

  • @xzex2609
    @xzex2609 6 หลายเดือนก่อน +18

    React vue and angular use closures all the time , all functional components are closures

    • @maciejzettt
      @maciejzettt 6 หลายเดือนก่อน +3

      As well as state management is

    • @Regeneration1996
      @Regeneration1996 6 หลายเดือนก่อน +1

      And react hooks to 😅

    • @xzex2609
      @xzex2609 6 หลายเดือนก่อน +2

      @@Regeneration1996 of course in the end a hook will return some functions as objects and states too , when I was said react I mean most of it uses closures

  • @mewansynniang1902
    @mewansynniang1902 5 หลายเดือนก่อน +2

    Beautifully explained

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

    Just incredible video as always. Somehow you always get to the absolute core of a concept and then demonstrate it beautifully

  • @PavloBozhok
    @PavloBozhok 6 หลายเดือนก่อน +1

    Thanks a lot, I know and remember how closure works in javascript, but I never knew about something tricks.

  • @RCSoftMedia
    @RCSoftMedia 6 หลายเดือนก่อน +1

    I use one type closure all the time, combined with promises, when I have to execute a function on an array of data asynchronously, all you have to do is return a promise with a function, inside create a couter at 0, create the function thats going to process an entry, before return, incremente the counter, and excecute the inner function again, when its done, resolve the promise.

  • @mhadi-dev
    @mhadi-dev 6 หลายเดือนก่อน +4

    Best used in Factory design pattern.

  • @matheusneves688
    @matheusneves688 6 หลายเดือนก่อน +1

    Thank you! Amazing content!

  • @captkalik
    @captkalik 6 หลายเดือนก่อน

    That for loop let var closure interview question is just brutal

  • @jovi9918
    @jovi9918 6 หลายเดือนก่อน +2

    Great quick watch

  • @WoShouji
    @WoShouji 2 หลายเดือนก่อน

    The Closure actually can be seen. It is simple and complex )))
    Basically it is an internal OBJECT.
    There is always a Scope Chain: an array with elements: [[Scopes]].
    1. Scope Chain and [[Scopes]] Array:
    The [[Scopes]] array (seen in DevTools as Scopes) represents the scope chain of a function. It contains objects that correspond to different scopes, including Global, Script, and any function-specific scopes.
    This scope chain allows the JavaScript engine to resolve variables as the function executes.
    2. Presence of the Global Object:
    Global object is always included in the scope chain and is usually the last element in [[Scopes]]. It contains globally defined variables, functions, and objects (like window or document in browsers).
    3. Creation of a Closure Object:
    When you define a nested (or child) function inside another function, a closure is formed. This creates a Closure object in [[Scopes]] that preserves any variables from the outer (parent) function that the inner function might need.
    The Closure object becomes the first element in [[Scopes]] for the inner function. The Global scope moves down to a later position, allowing the child function to access both the outer function's variables and the global variables.
    4. Persistence of Variables After the Parent Function Ends:
    Even if the parent function has finished execution, the variables it defined will be preserved by the closure as long as the inner function (closure) remains accessible somewhere in the code. This is what allows nested function to retain access variables of parent function and even change them when nested function called again and again and again.
    5. Additional Scopes (e.g., Block Scope):
    If there are additional block-scoped variables (for example from "for (var i = 0; i < 3; i++) {...}" loop), they can appear in the [[Scopes]] array as a Block scope, though this only applies to let and const. Variables declared with var would not create a new block scope, as they have function scope (Global) rather than block scope.
    So,
    6. the Definition of Closure:
    A closure in JavaScript is an internal object that is created whenever a function (child) is defined inside another function (parent). This closure object allows the child function to retain access to the variables in the parent's scope, even after the parent function has completed execution. The closure is represented in the [[Scopes]] array as a Closure object, holding references to the outer function's variables that the inner function may use.

  • @himalayagupta7744
    @himalayagupta7744 6 หลายเดือนก่อน +1

    I had doubts for this last example, so I asked gpt to explain it to me deeply. It errored the first few times but at last gave the correct answer which claude also verified.
    Yes, for each iteration of the loop, a new scope is created, and within that scope, a new binding for the variable i is created. Here’s a detailed breakdown:
    First Iteration (i = 0):
    A new scope is created.
    A new binding for i is created and initialized to 0.
    The setTimeout callback captures this binding, so it logs 0.
    Second Iteration (i = 1):
    A new scope is created.
    A new binding for i is created and initialized to 1.
    The setTimeout callback captures this binding, so it logs 1.
    Third Iteration (i = 2):
    A new scope is created.
    A new binding for i is created and initialized to 2.
    The setTimeout callback captures this binding, so it logs 2.
    In each iteration, the let declaration ensures that i is re-declared and re-initialized within the new scope. This results in three separate bindings for i, each one unique to its iteration.

  • @TalesGrechi
    @TalesGrechi 6 หลายเดือนก่อน

    Great video!

  • @crakyanime8903
    @crakyanime8903 6 หลายเดือนก่อน

    it would be good if you cover conditional scope or conditional closures

  • @AlejandroPoleo18
    @AlejandroPoleo18 5 หลายเดือนก่อน

    ❤ love it

  • @karimkrimou399
    @karimkrimou399 6 หลายเดือนก่อน +1

    Excellent and really clear approch and explantion

  • @24306529
    @24306529 6 หลายเดือนก่อน +9

    dude be selling 10 other videos within 1 video

  • @QuanTran-wt4yt
    @QuanTran-wt4yt 6 หลายเดือนก่อน

    Can you make a video talking about message queue?

  • @prince5922
    @prince5922 2 หลายเดือนก่อน

    MDN particularly mentions that JS automatically creates closures everytime you create a function. So the first example actually IS A CLOSURE.

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

    Please I need a video on must know backend interview questions, web services and websocket

  • @tommysmith5479
    @tommysmith5479 6 หลายเดือนก่อน +1

    So, if I can sum up and get confirmation: a closure is where an outer function or scope is not garbage collected because there is an inner function that relies on the outer function or scope's variables... is this correct?

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

    Printing 3 times 3 has more to do with the event loop than closures

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

      both actually but ok, he ommited event loop becouse it's unrelated

  • @consoledoterror971
    @consoledoterror971 6 หลายเดือนก่อน +5

    I think the explanation for var, let with for loop is a bit wrong. 🤔

    • @amiryankolovich8560
      @amiryankolovich8560 6 หลายเดือนก่อน

      I ran the code with the var and got 0,1,2 🤔

    • @amiryankolovich8560
      @amiryankolovich8560 6 หลายเดือนก่อน

      Oh its because i had an error few lines before this I guess its js weird engine

  • @dfields9511
    @dfields9511 6 หลายเดือนก่อน

    Pascal lets you do this as a well, never used that feature of pascal. But was forced to Learn it

  • @manpreetjord1885
    @manpreetjord1885 6 หลายเดือนก่อน

    Great video as usual. But Kyle, your 1x Playback speed feels like 1.25x bro. 🙂
    Interviewers also ask that how you will print 0,1,2 when using var i=0; . We have to use the concept of closure here.

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

      you can do something like this and it works:
      for(var i = 0; i < 4 ; i++) {
      const func1 = (i) => {
      setTimeout(()=>{
      console.log(i);
      },1000);

      }
      func1(i);
      }
      in this way you use closures to capture the value of i on each iteration even if you use var

  • @saurabhshrivastava5383
    @saurabhshrivastava5383 5 หลายเดือนก่อน

    Hello Kayal, In your second example for closuers "function elementCreator(element)", if we directly return document.createElement(element) instead returning a function then what difference will it make, I think direct return will be better, what you suggest.

  • @lesalmin
    @lesalmin 6 หลายเดือนก่อน

    This is the best explanation of closures I've seen (including your own previous explanations).

  • @doniaelfouly4142
    @doniaelfouly4142 6 หลายเดือนก่อน

    Thanks

  • @ironCheval
    @ironCheval 6 หลายเดือนก่อน +1

    Does it keep the dependant variable and delete the old ones?
    E.x. when you added age = 30, will age = 29 be kept still by javascript?

    • @MbzMOKKA
      @MbzMOKKA 6 หลายเดือนก่อน +1

      No because it's the same memory spot.
      In his example, when he does age = 30, it overwrites the value 29 in variable 'age', instead of creating a new variable.

  • @mcRidersEvolution
    @mcRidersEvolution 6 หลายเดือนก่อน

    What is the purpose of returning function which returns element and not returning element with the first function?

  • @siasquad7360
    @siasquad7360 6 หลายเดือนก่อน

    Sir please explain with the help of draw and after that code

  • @Mari_Selalu_Berbuat_Kebaikan
    @Mari_Selalu_Berbuat_Kebaikan 6 หลายเดือนก่อน

    Let's always do alot of good ❤

  • @Kingreey
    @Kingreey 5 หลายเดือนก่อน

    Excelent

  • @alexandraweather4156
    @alexandraweather4156 6 หลายเดือนก่อน

    Thank you for this video and the job you do, but what is a JavaScript Developer? The only thing i could find is "JS developer" - in react, angular, vue and stuff
    Is there atually a job for JS developer in JS?

  • @iftekharhaidar2397
    @iftekharhaidar2397 6 หลายเดือนก่อน

    Dear, could you please explain what is JavaScript reference memory?

  • @viallymboma9874
    @viallymboma9874 6 หลายเดือนก่อน

    In fact the concept of react custom hooks relies on the notion of closure
    When you're building a react custom hook, you're actually using closure.

  • @alienews0
    @alienews0 5 หลายเดือนก่อน

    5:00 nope u didn't called your function on that line, u declared it ; u called it on the last line : return func2

  • @AlThePal78
    @AlThePal78 6 หลายเดือนก่อน

    I honestly thought that it didn't call function too until it said return function to and since the variable was already age 30, that is why it started with 30. What if you called the function first?

  • @virtual5754
    @virtual5754 6 หลายเดือนก่อน +1

    What you describe is just oop, but with extra steps

  • @ajiteshmishra0005
    @ajiteshmishra0005 6 หลายเดือนก่อน

    Hii brother...
    You explained let and var concept in for loop.
    But still I'm confused.
    Can you explain in some other way.

  • @supernovaw39
    @supernovaw39 6 หลายเดือนก่อน

    Unrelated but why are you running VS Code as Admin? 🤔

  • @green-coder-clj
    @green-coder-clj 6 หลายเดือนก่อน

    I misread the title as "Learn Clojure in 13 minutes" 😅
    Clojure & Clojurescript indeed help landing a job for the FE.

  • @sealsharp
    @sealsharp 6 หลายเดือนก่อน

    I was just wondering, is it possible to see the what structures&code JavaScript actually creates? Don't know how to call it.
    In C#, you can see the different stages ( C#, IL, ASM ) and that makes perfectly clear how closures technically work.

    • @letsbeafraid2233
      @letsbeafraid2233 6 หลายเดือนก่อน +1

      JavaScript doesn't create code it gets JIT compiled into machine code directly by the engine. Read about V8 and how it works

  • @Pareshbpatel
    @Pareshbpatel 6 หลายเดือนก่อน

    JavaScript Closures, bautifully explained. Thanks, Kyle
    {2024-07-09}

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

    Is there a real world use for it??

  • @DanielBrownsan
    @DanielBrownsan 5 หลายเดือนก่อน

    I genuinely thought I had the playback speed set to 150-200% for the first 3 minutes of the video.

  • @johnpatrickoldfield534
    @johnpatrickoldfield534 6 หลายเดือนก่อน

    Do you know how to do that integer story with a public bank website inside a private login inside page two with a currency and interger value where I need to insert a legal agreement account balance update from 0 => R 1 000 000 Zar ? It’s a public https web address?! The javascript wipes the direct insert after page refresh how do I make the interger value const? Do you have team viewer and want to try and or show me?

    • @JacobZigenis
      @JacobZigenis 6 หลายเดือนก่อน

      Hate to break it to you, but absolutely no one is going to help you with manipulating a bank website. Further, what you're seeing isn't just javascript wiping the value. It's retrieving the value from the bank's servers, which you cannot modify no matter how much you manipulate the page. Gotta study up a lot more and stop asking for advice on malicious activities on TH-cam. Also, on the off chance you do manage to do something malicious, you will almost certainly get caught.

    • @johnpatrickoldfield534
      @johnpatrickoldfield534 6 หลายเดือนก่อน

      @@JacobZigenis my laptops storage is full and not booting at the moment so I cannot screenshare. I don't see how it's my problem the external and Internal banking staff cannot manually show me howto insert credits into bank tables in cobol or whatever the language is from the email pseudocode to the browser web security layers in the osi model so that I may make debits to pay attorney legal fees for bank account topups. I think it's worth a trial investigation ie look, screenshare, record discuss, etc and a look into the file and code framework on the Javascript and in the console just for a deeper explination, because I just know sql server, table updates, hidden servers, html, Javascript and css. The actual coding language and topology to see exactly where the update changes are made. Worse case the system gets reported and then gets fixed. I don't think it's too complicated less than 1000 lines of code plus minus with like 400 lines on my screen at once with like 30 lines each side of the zero balance variable.

  • @aqibmalik6313
    @aqibmalik6313 6 หลายเดือนก่อน

    first comment after first comment of arunkaiser😂😂

  • @trombecher
    @trombecher 6 หลายเดือนก่อน +5

    If you have a global function that captures a variable from the outer (global) scope, then this function is a closure, because a closure is a function that captures variables from the parent scope.
    Even if you are calling console.log, because console is a variable in the global scope, you are capturing a variable and therefore your function is a closure.
    The only functions in JavaScript that are not closures are pure functions.
    Please do some research before making a 13min video about a topic.

    • @looming_
      @looming_ 6 หลายเดือนก่อน +1

      Really makes me wanna buy his “course” xd

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

    Also redix

  • @MichaelKire
    @MichaelKire 6 หลายเดือนก่อน +14

    Fun fact. Classes in JS is actually just syntactic sugar for a closure with a special constructor/prototype function inside

    • @charleschukwuemeka8482
      @charleschukwuemeka8482 6 หลายเดือนก่อน

      While watching the video, this came to my mind... It's nice seeing that someone else thought of the same thing

    • @trombecher
      @trombecher 6 หลายเดือนก่อน +1

      A class is syntactic sugar for a function, not necessarily a closure. A function becomes a closure when capturing variables from the parent scope, not because it’s a class.

  • @jovincebrillantes1042
    @jovincebrillantes1042 6 หลายเดือนก่อน +1

    So they're called closures, well I'll be dammed. I've been calling them higher order functions all this time.

    • @rico454
      @rico454 6 หลายเดือนก่อน

      They are kinda the same thing. Higher order functions return a function and usually, the function that is returned has access to variables inside the original function which is what closures is. So yeah different concepts but essentially the same thing

  • @RayZde
    @RayZde 6 หลายเดือนก่อน +1

    This is not true for all programming languages. JavaScript is an anomaly.

  • @Psai4456
    @Psai4456 5 หลายเดือนก่อน

    one guy asked me in interview i told the wrong answer

  • @Uncaught_in_promise
    @Uncaught_in_promise 6 หลายเดือนก่อน +2

    Please create Next js e-commerce project catalog with multiple checkboxes filtering, sorting, pagination, search. More e-commerce realistic. Thank you.

  • @Efecretion
    @Efecretion 6 หลายเดือนก่อน

    Closure to scoping is like 0/1 to binary -- closure is how scoping is implemented in JS, while 0/1 is how binary is represented typically.

  • @AchwaqKhalid
    @AchwaqKhalid 6 หลายเดือนก่อน +1

    Dude increase your *FONT* size for tutorials at least 💡

  • @arunkaiser
    @arunkaiser 6 หลายเดือนก่อน +2

    First comment

    • @aniketroy03
      @aniketroy03 6 หลายเดือนก่อน +1

      autograph pls 😂

    • @Pacvalham
      @Pacvalham 6 หลายเดือนก่อน

      🥇

  • @ahmatmhtlouky4179
    @ahmatmhtlouky4179 5 หลายเดือนก่อน

    Man😂 after each five words you link as to another video 🤦🏽‍♂️

  • @jasonsworld333
    @jasonsworld333 6 หลายเดือนก่อน +2

    Too bad the jobs are all taken lol

  • @alpaca_growing_kit
    @alpaca_growing_kit 6 หลายเดือนก่อน

    If you work with React you desperately need to understand closures. I have run into some insane React bugs that were created because of closures in complex functional React.

    • @alpaca_growing_kit
      @alpaca_growing_kit 6 หลายเดือนก่อน +1

      HINT: Watch out for modifying an onChange when its getting prop drilled. Another reason to create context hooks as often as possible...

    • @looming_
      @looming_ 6 หลายเดือนก่อน

      Fact that this dude didn’t mention react once makes me question his understanding. Also the fact he messed up the for loop example.

  • @zfolwick
    @zfolwick 6 หลายเดือนก่อน

    god I hate javascript

  • @servertimeout8371
    @servertimeout8371 5 หลายเดือนก่อน

    no semicolons 😮 you would never get a job from me

  • @b1studio648
    @b1studio648 6 หลายเดือนก่อน

    Why u move ur head too much? Can you hold your head still while recording or move less. I would appreciate it. The way u move your head makes me dizzy

  • @logimw
    @logimw 6 หลายเดือนก่อน

    why your head bouncing so much? it's very disracting no matter how valuable content you show (always very valuable)

  • @AdolfRizzler41
    @AdolfRizzler41 6 หลายเดือนก่อน +1

    Do a video on booty sizes

    • @abcdabcd8605
      @abcdabcd8605 6 หลายเดือนก่อน

      What does that even mean?!!