setTimeout + Closures Interview Question 🔥 | Namaste 🙏 JavaScript Ep. 11

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 พ.ย. 2024

ความคิดเห็น • 1.2K

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

    3 years of coding in JavaScript and now i know that i don't know javascript properly 😂. Thank you bro tune meri aankhe khol di🤩

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

    "Time, tide and JS wait for none" - Want this on my T-shirt 😀

  • @sravankumar-hv3lp
    @sravankumar-hv3lp 3 ปีที่แล้ว +70

    Your passion to teach is awesome. We can clearly see it in your eyes you want to help others to grow rather than earning money by sharing your knowledge. ❤️

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

      Thank you brother ❤️

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

      @@akshaymarch7 Love you Bro for this knowledge sharing ❤

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

    Interviewer asked me exactly this question, but i didn't know.
    But thanks to the knowlege i got from your other videos, i was able to convince them to hire me.
    Thank you Akshay, for everything you've done and everything you'll be doing in the future.
    World needs more people like you, who not only are successful themselves but also guiding others and making their journey a lot easier.

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

      ❤️

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

      Why would you go to an interview without reading a book about the subject? All of these things are almost in every JS book.

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

      @@merlinwarage lol

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

      @@merlinwarage can you please recommend me a good js book

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

    I've completed my master's in mechanical enginnering, and after that, I planned to switch my career in the IT industry.
    Yesterday, I cracked the first round of interviews for the position of front-end developer.
    All the questions on JS were from your videos, and I can bet that the interviewer has also watched your Namaste Javascript series.

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

      What's the update?
      Have you joined?

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

      @@manojpatil2457 I'll join from 6th September. I've cleared one more interview for the position of a front-end developer. Thanks to Akshay once again.

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

      @@farazhusain925
      Wonderful .
      Which portal you are using for applying?

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

      is react also asked in that

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

      @@ritikraj2629 Yes

  • @AmanMishra-pn3cq
    @AmanMishra-pn3cq 2 ปีที่แล้ว +148

    Things learned:
    1. setTimeout stores the function in a different place and attached a timer to it, when the timer is finished it rejoins the call stack and executed.
    2. Without closure the var reference gives the latest value as it does not retain the original value but rather has the reference so any update in value after timeout will be shown.
    3. If we use let/const because they have block scope, every time a new copy of variable is attached, thus this can be done without closure.

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

      6:57
      function y(){
      for(var i=1;i

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

      @Kushagra Shrivastava All of the timers start at the same time, not one after the other. So the first logs to the console after 1 second, the second after 2 seconds, the third after 3 seconds, etc. This makes them print one second part from each other.

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

      @@chriskatanic8080 thank you so much

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

      If we use const, you will find that his example prints 1 once, then throws an error. It is a constant and can not be changed after that, i.e. it is not a changeable “variable” in a true sense, so it is a misnomer.

    • @SaiKumar-fi1ll
      @SaiKumar-fi1ll ปีที่แล้ว

      @@stephen2824 ya true

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

    Do note that the timer can expire before the whole loop gets executed when you change the stopping condition from i

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

      can anyone plz help me why the suggested solution in video of using let (a block scope variable) variable isn't working here :
      function z ( ) {
      let a = 10 ;
      a++ ;
      setTimeout( () => {
      console.log(`from setTimeout : ${a}`) ;
      }, 600);
      console.log(`from last console log : ${++a}`) ;
      }
      z() ;
      my output is :
      from last console log : 12
      from setTimeout : 12
      expected output :
      from last console log : 12
      from setTimeout : 11

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

      @@solowolf5304 function z ( ) {
      let a = 10 ;
      a++ ;
      function local(x) {
      setTimeout( () => {
      console.log(`from setTimeout : ${x}`) ;
      }, 600);
      }
      local(a)
      console.log(`from last console log : ${++a}`) ;
      }
      z() ;

    • @Test-wi3mj
      @Test-wi3mj 2 ปีที่แล้ว

      @@solowolf5304 function z ( ) {
      let a = 10 ;
      let b = a++ ;
      b++
      setTimeout( () => {
      console.log(`from setTimeout : ${b}`) ;
      }, 600);
      console.log(`from last console log : ${++a}`) ;
      }
      z()

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

      @@solowolf5304 please carefully look for....++I and I++ .

    • @ManishKumar-oe5bb
      @ManishKumar-oe5bb 2 ปีที่แล้ว +2

      @@solowolf5304 inside setTimeout the value of a is also 12 because the time it's going to log a value, it's already updated to 12 . function inside setTimeout remembers the a's reference not value. So at a's memory the value is updated to 12. So it is printing 12.

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

    After reading many articles and watching other videos about closures & loops, I finally understand why we experience this behaviour. The key was to understand that the async function stores the reference and not the value! Thank you, and I love your style of teaching.

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

    Man...I was searching the whole internet to understand this problem from months none i could understand. And today you made me understand it in just 17 minutes hats off to u man....u are a gem

  • @faizanmuhammad802
    @faizanmuhammad802 9 หลายเดือนก่อน +2

    Awesome!
    A small quiz:
    "closures keep reference not the actual value" (repeat it 10 times) and guess the output of below snippet
    for(var i=1; i {
    console.log(i);
    i = i + 1;
    }, i*1000);
    }
    console.log("outside: ", i)
    if( i < 10 ) i = 10;

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

      outside:6 // The for loop get executed before the setTimeout func
      10
      11
      12
      13
      14
      //after the for loop execution now the " i " value become 10 and the value in settimeout has the value 10 beacuse of lexical scope .

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

    Sir, Please make series on React as well. Will be highly appreciated :)

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

      Yes React please

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

      And also make it relative with namaste js series.

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

      Yes we need a series on react just like this it will be very helpful

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

      Exactly. akashay bro. Waiting for it.

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

      yes we need "Howdy React!" :P

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

    I did exact same mistake what he expected and got output as all 6.
    What an amazing concept you taught.
    You expressions while teaching 😍.

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

    Great job Akshay, I am myself a javascript developer and love JavaScript, u really inspiring, doing a grt job not only in educating them but explaining them these tough concepts so that even kindergarten child can understand, really amazed to see your passion . God Bless you.

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

    Bhaiya ye video dekhne k baad jiski job lagegi vo itna kush ni hoga jitna aap thumbnail mein hore 😅. ❤️

  • @Aman-gw7ro
    @Aman-gw7ro 2 ปีที่แล้ว +3

    got that answer of setTimout running in loop before you printed on console. Very cool example of closures. Seriously man best playlist on JS on youtube.

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

    I am binge watching NAMASTE JAVASCRIPT and look forward to do the same next weekend also. The best JS course in the world right now.

  • @sahul._
    @sahul._ 2 ปีที่แล้ว +7

    To be simple,
    Let is block scoped and also function scoped,
    But var is function scoped not block scoped

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

    I always watch traversy media, web dev simplifed , dev ed and all (and i always think that no one is that good enough for javascript from india)..
    but you prove me wrong .. Thank you bro keep making video like this..

  • @anonymous........
    @anonymous........ 3 หลายเดือนก่อน +3

    15:52 , One common approach to achieve this with var is by using an Immediately Invoked Function Expression (IIFE) inside the loop.
    Here is the code:
    function x() {
    for(var i = 1; i

    • @Hellboy_eeuiii
      @Hellboy_eeuiii 24 วันที่ผ่านมา +1

      Ya this is iife making allocating a new memory space each time the loop iterates

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

    This is most literally the most simplified explanation on closure and this question over the internet. As usual just amazing and thanks a ton, man

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

    The problem with Akshay is that, He has positive radiating energy. You can't stop watching his videos :D

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

    This is the kind of teacher I have been waiting all life.

  • @ashwini.r.
    @ashwini.r. 3 ปีที่แล้ว +3

    I like the way how you added memes/gif in between... put some smile while we're concentrating to learn concepts. Thank you for making us understanding JS.

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

    Every time you smile, I smile..that too while learning javascript😂. What a great teacher❤

  • @gokunik
    @gokunik ปีที่แล้ว +5

    One more way to solve that problem:
    function x(i) {
    var a = i;
    setTimeout(() => {console.log(a);}, a * 1000);
    }
    for (var i = 0; i < 5; i++) {
    x(i);
    }
    This makes the function more dynamic.

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

    // In below case, close is getting called for each value of i. And for each close() called a new execution context is getting created and in execution phase of that context new callback function context is created with lexical environment, which is reffering to i with which close() was called as close(i) was immediate parent of that callback function. Above cycle goes on and on until for loop ends.
    function clock(){
    for(var i = 1 ; i

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

      you saved my day my man. what a wonderful explaination. you dived right back to the basics..thanks!!

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

    For those having dfficulty like me in understanding why each iteration creates its own closure or stores i in a separate memory space unlike var.
    You can think of each iteration of for-loop like a mini function almost, with new/different value of i (1,2,3,4,5) and and since let is block scoped (block scope meaning within the curly braces of each mini-function) it stores reference to i at different place (different closure made by different mini-functions).
    Also that,
    a closure closes over or captures the current scope when the callback function is passed to setTimeout.. But why does it closes over when call back function is called?
    Because a closure is formed when a function is created inside another function and the inner function has access to the outer function's variables and parameters.

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

      thankyou I was able to understand the concept but your view made my concept more clear

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

    I got so excited when I saw this because I stumbled upon this exact problem some time back while I was working on a sorting visualizer project and couldn't figure out what was wrong with my code for days. Ultimately someone advised me to use async and await but now i fully understand why that didn't work.

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

    Your namaste javascript series is like web series. I know all JS concept still i am watching your video. it's really fun. keep on #JS#GURU

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

    I was already aware of the question and output but didn't know how to fix this problem. You explained it very beautifully

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

    Finally I found 1 channel which sales diamond's and it is free.

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

    1 question -
    I used let j=i inside loop just above the setTimeout
    And used console.log(j) inside setTimeout and its worked...

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

    Javascript is tricky but your explanation is so crisp and clear that even a non JS developer can understand it.

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

    setTimeot + closures -> setTimeout passed with closure variable is referrence pass it as a copy , either set let in for loop so that every time a new copy is passed or call it in fn by passing copy of var

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

    Some tough concepts well handled and it's always so fun to watch as the way you keep the viewers glued to the video. I have never used JS before but now I feel that I should start doing some programs related to it for practice. I never got the idea of craziness of viewers towards this series , now I do realize their excitement for "Namaste JS". Kudos!!

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

    Simply Put:
    Var:
    ====
    Function scoped [only one shared binding for all of your loop iterations- value of i will be 6]
    Example:
    =======
    setTimeout(function() {console.log(i)}, i*1000); // first iteration, remember to call function with value i after 1 sec
    setTimeout(function () {console.log(i)}, i*1000); // second iteration, remember to call function with value i after 2 sec
    setTimeout(function {console.log(i)}, i*1000); // third iteration, remember to call function with value i after 3 sec
    and so on
    let:
    ====
    Block scope [i get a new binding for each iteration ]
    Thanks Akshay.

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

    on the 11th clip in a row, just trying to remember this for an interview. great content man, your energy is actually making me want to write some functions and just play with them, I have never seen easier explanations of the execution context, hoisting and closures. Kuddos man

    • @CharanGs-t4i
      @CharanGs-t4i ปีที่แล้ว

      hey , did you clear the interview ? was the questions asked were covered in this playlist ?

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

      i think he is dead....he might have committed sucide bcoz he is not replying
      @@CharanGs-t4i

  • @SalmanMalik-w2x
    @SalmanMalik-w2x 3 หลายเดือนก่อน

    i tried understanding this concept by watching it several times in this week but finally after watching it now, i hope i can say understood the 80% of concept in this video. Btw extremely Thank full to you you created content of this high notch quality.

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

    The whole Namaste JS series feels like dope and the meme at the end of this video just mimics that!!! Hats off to you Akshay.

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

    Was working on DrumKit Project as a newbie to JS got frustrated when I got stuck in the "for loop". Thanks a lot for explaining.

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

    Bhai ek number videos hai apke. I have not watched this full video yet, currently on 05:03 minutes. I just decided to try to take this up as a coding challenge and got the desired result. You have explained the concept of closure so damn well. More power to you man.

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

    I personally started hating js after encountering similar issues as a fresher but now after coming across your channel i realised how much i didn't know and how beautiful js really is..tysm❤️

  • @DK-ox7ze
    @DK-ox7ze 3 ปีที่แล้ว +51

    "Many senior engineers will pull their hair over this". Well, if you don't know about the asynchronous nature of Javascript, you aren't senior!

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

    since we cannot use a for loop because the i always point to the last number, we have to somehow make a copy of i so that we can use the designated number. for that
    1) use let.
    let i
    2) Use a closure function if you want to use the var i, so that a copy of i is created everytime the function copy() is triggered.

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

    Oh my god!
    I had an interview today and the interviewer asked this. The first question in JS he asked was this.
    But I didn't know it. 😐

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

      Next time, aag laga dena mere dost!! 🔥

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

    I always thought that only C++ template spaghetti has something mind bending to offer, but now I have a purpose to learn JS. Thank you Akshay bhai!

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

    Now that you spoke of event loop, we need a video on this topic too 😀
    Folks, like this comment if you too want a video on event loop.
    Thanks!! 🙏

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

      Haha, you got me. 😅
      But don't worry brother, before Event Loop there are few more fundamentals to cover. After covering them, event loop will be a cakewalk. 😎
      Pehle thoda mahual banayenge, fir seekhenge. 😇

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

      Event Loops can be understood by JSConf webinars .

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

      Hey folks, event loop video is out on this channel 3 days ago, check it out.

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

      @@akshaymarch7 isi bat pe hindi me bhi bana do 🤩🤩

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

      @@lsd3284 true.

  • @MariGarchagudashvili
    @MariGarchagudashvili 7 หลายเดือนก่อน +1

    You could also pass i as a callback parameter instead of enclosing it in another function
    function x () {
    for (var i = 1; i

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

      You can further simplify it as:
      function hello(){
      for(var i=1;i

  • @MahendraSingh-od6cp
    @MahendraSingh-od6cp 3 ปีที่แล้ว +5

    You explain things in very nice and different way so that everyone can understand, watching this series continuously and enjoying and waiting for new series on React js. You are just making life easy....Keep it up man 👏👏

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

    Never ever learnt such topics man . This teacher is on a different level.

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

    We could also make use of IIFEs here to create a closure. Its basically the same as creating a wrapper function and explicitly calling it as shown in the video
    for(var i=0; i

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

    I wish, I could have watched it before.
    Today interviewer asked the same question.
    Instead of close wrapper function , i think Iffe was the good option.

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

    I knew the answer, when you questioned. That's because of your previous video explanation on Closures, block scope, global scope.
    Thank you very much Akshay.

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

    Thank you brother 🙏. Just few days ago, this question asked by interviewer 💻. and I gave same what same answer like "It will increment variable i after some m/sec". That time she told me I was wrong. But watching your video💻, now I 💡clear everything. and also now I understand "var and let" can make such change. Thank you again 😇✌️👏

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

    "Wherever I go, I see him" - Closures

  • @sarthakghosh4690
    @sarthakghosh4690 10 หลายเดือนก่อน +1

    I was asked this question at an interview with DeliveryHero. Brilliant!

    • @murali-krishnan
      @murali-krishnan 10 หลายเดือนก่อน

      Great man, did you crack the job? How many rounds of interviews did you go through and what were those rounds?

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

    Yes bro crt, many interviewer asked this question

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

    Its actaully best quotes time,tide and JavaScript wait for none.😂 now I totally understand setTimeout because of your teaching is awesome. lots of respect for you

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

    Learning: never use var in js, unless almost necessary
    Var will mess your code beyond recognition

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

    I've an interview scheduled today yet I'm watching this playlist, my confidence is getting higher with completing every video

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

    6:10 😂 SAVAGE 🔥
    "That's how it is not.."

  • @mohansingh-kx4rf
    @mohansingh-kx4rf 3 ปีที่แล้ว +1

    Highly appreciated man. Just a note, to solve the problem with var , you are calling function with value not a reference. Problem will remain same if you pass the reference if I. Btw thank you for efforts.

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

    Akshay explains confusing stuff: "You will pull your hair"
    Baldie me: give me something else, I don't wanna play

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

      I think you still got some hairs, dig deeper🌝

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

      @@UMBERELLA_ACADEMY 😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂

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

    recently i have an interview with HCL and the have asked the same question .... i have answered like you ha ha ha they have very much impressed even interviewer doesn't know in-depth thanks buddy you are great ........ please continue this

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

    4 solutions to this question
    1. Use let instead of var
    2.use iife
    3.Bind the callback function with the value ofi
    4.move i to outer function with let

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

      U mean 2 poin variable life time' u saying right

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

    Most underrated mentor out there..... 🔥🔥🔥

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

    Amazing bro.. I have been working with JS for 4 years.. Finally I understood what closure was. Thank you

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

      Not yet, next video will cover more about closures. 🔥

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

    Thank you Akshay for making it simple to understand. I have one doubt: You have mentioned timeout to x*1000, so why every output like 1 2 3 ... is printing after exactly 1 second even if x is incrementing?

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

      when the settimeout was executed in the current execution, at that time the value passed to the settimeout function was 1000, 2000 and so on. so based on that value the timer is confugured in the background thread. when the variable is used to manipulate, it gives output as single value which is 1000, 2000 etc. you are not keeping reference of that variable. thats why it was printing aftet 1, 2, 3 seconds.

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

      Because, Only the inner function part is put somewhere else not the whole setTimeout function.
      Akshay sir, please correct me if i am wrong.

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

      may be running this will clear you doubt
      for (var i = 1; i < 4; i++) {
      const r = parseFloat((Math.random()*10).toFixed(2));
      const timeOut = parseInt((i + r) * 1000);
      console.log(i, timeOut, r);
      setTimeout(function () {
      console.log('var', i, new Date().toLocaleTimeString())
      }, timeOut);
      }

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

    Bhai salute. I was asked the same question in an interview when I was a fresher. Tab answer pata nahi tha aur practice se maine let use kiya tha. Interviewer asked why use let and could it done by using var. Tab kuch basic understanding nahi tha so I couldn't answer. Watching this video to prepare for new interviews after 2 years experience in field, I instantly knew what to do when you asked how to do it using var coz I remembered your previous videos lessons. Lots of love bro. Thanks for making me fall in love with JavaScript❤❤

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

    Akshay, lovely explanation, awesome outro music. Now Liggi is going to be on a loop today. 😂

  • @ShantanuMishra-p8x
    @ShantanuMishra-p8x 19 วันที่ผ่านมา

    Great content bhaiya really enjoying watching this playlist . Tried this problem with a different approach and it worked :)
    function timer()
    {
    count=0
    for(var i=1;i{
    count+=1;
    console.log(count);
    },i*1000)
    }
    }
    timer()

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

    6:26 panic sets in. 😭
    11:07 relief. 😊

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

      This shows how patiently you watched the video, brother! ❤️

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

    Great explanation dude! I am myself guilty of hating javascript for a long time because I thought it was kind of stupid but now I see there is a reason behind everything.

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

    First of all, beautiful series. Amazing work giving the in-depth knowledge of JS Concepts. Thank You very much.
    Question: In the block of for loop when loop variable is declared using 'let', you mentioned that in each iteration, a new copy for variable i is created.
    i++ executes by going to the reference of the variable and then adding 1 to it.
    I want to understand when the new reference is created? after i++ executes and it enters the for loop? Or when the loop body ends?
    Also, is there a separate instance in this case just adding to the value of i and creating a new instance with the corresponding value in that loop?
    Basically, I understand that in each iteration a new memory address is assigned. I don't understand when this process of creating new reference executes.
    1. loop body ends, new reference created, old memory freed, i++ executes?
    OR
    2. i++ executes, new reference created with updated value, old memory freed, loop body starts?
    Which of these is the correct order?

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

    The other way of doing this maybe without lexical reference is:
    for (var i=1; i

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

      yes in video, he has used loop counter as timeout variable, since you are passing it to function as argument, a new copy is created in function each time

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

    Why does it create a new copy when we are using let? In every loop iteration the variable i remains the same, it is just that its value increases and is stored at the same place. Why is setTimeout unable to access just the reference to i variable and behave the same as var? Why is there a new copy associated?
    I did not understand why it happens just because it is block scoped. The timeout function will always have "let i" with it since it is always present in its lexical env just like a var variable.

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

      Me too he just said block scoped but he didn't explain how it's new variable not even in his block scope video. If you know can you explain?

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

      @@jasonbrody4618 I too dont understand. Can Anyone explain this.?

  • @LifeLogic-Insights
    @LifeLogic-Insights 9 หลายเดือนก่อน

    setTimeOut() function forms a clousure so this function remember the reference of the variable basically it takes this callback fun and store it at some place untill given time frame is not expire once time is expire it will exsicute peace of code. in this whole process remain code will excicutes it will not wait for compleation of the setTimeout() function.

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

    You made me pull my hair so many time, I am bald now. What to do? :p

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

      🥺 Don't worry brother, this will help you - amzn.to/2VUgHAu

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

      @@akshaymarch7 😂😂

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

      @@akshaymarch7 😂😂😂

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

      @@akshaymarch7 grt sir this solution will enclose his baldness.

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

    I will remember closures for ever, yeahhhhh!!!!! 🏆🏆❤️❤️❤️❤️❤️❤️❤️❤️❤️

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

    Please watch this video with UTMOST ATTENTION. Listen to each line very carefully. 🙏
    Next Video: CRAZY JS Interview 🤯 - th-cam.com/video/t1nFAMws5FI/w-d-xo.html
    Also, do let me know will you be able to answer this question in the interview now? ✌🏽

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

      @revking I don't have a full plan myself. 😅JavaScript is huge, very huge, very very huge. I'm very confused, what to cover and what not to.
      If I start covering everything then this series will become a ` while(true){ makeVideo(); } ` 😅
      But I'll definitely think about important topics and try to come up with Long Term Vision and a roadmap for Namaste JavaScript. 👍
      Thank you so much for your comment, brother. ❤️

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

      Akshay 'this' keyword is very confusing in js..🙄🙄

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

      Exactly : ) finally the music is awesome.....

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

      @@EeshaKPopDanceCovers even me also

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

      @@akshaymarch7 this line If I start covering everything then this series will become a ` while(true){ makeVideo(); } ` >>> super bro :) love you :) ❤️❤️❤️❤️❤️❤️❤️

  • @RohitPal-lz1wf
    @RohitPal-lz1wf 2 ปีที่แล้ว

    Because of your lectures, most of interviewers now know, What to ask and how to check in-depth knowledge and understanding of candidate.

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

    my interviewer asked the same & that time i was stuck on it.
    thanks for making me understand 😍

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

    So interviewer frame questions from this playlist got it!!! Let next interview come...

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

    This is the best Javascript playlist in the entire universe!

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

    Solutions: 5 answers to this tricky qns:
    1.Bind "i" with callback method
    for(var i =1; i

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

    The way of explaining the inner implementation of the code was very good

  • @Shaktish-kumar
    @Shaktish-kumar 2 ปีที่แล้ว

    Hi Akshay,
    setTimeout functions allows parameters, so we can pass the i and log the value too
    function foo () {
    for(var i = 1; i {
    console.log(i);
    },1000, i);
    }
    }
    foo();

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

    Alternate solution using var:
    var num = 0;
    function printNum() {
    if(num === 6)
    return;
    if(num > 0)
    console.log(num);
    num++;
    setTimeout(printNum, num*1000);
    }
    printNum();
    This solution prints num after num secs

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

    So let me see if I understood it right. When we use 'var i' like that, all the functions point to the same refrence of i in their memory creation stage.
    However, when we enclose the setTimeout with the function close(i), and after defining it, invoke close(i):
    we first create an execution context for the function close(i) and push it to our call stack. In the memory creation stage, we allocate memory for i: undefined, but just like you've mentioned it can be called x, it doesn't matter, since this is just the name of the parameter the function expects to recieve as an argument. And then, on the code execution stage, close is called with i which is equal to whatever current i in the loop we are at, let's say 2. So i in the memory part of the function execution context(function stack frame) is now replaced with 2. And then this frame is poped out of the stack to be handled by the timer handler until the timeout is reached. The same happens for each of the close(i) invocations, which is why we're getting different i's for each invocation.
    Is it right?

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

      i dont know much but your explanation seems right.

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

    2:20 this is called asynchronous behaviour of JS where it does not wait for some other part of code to be executed it will execute the next part of code.

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

    var use instead of
    function x(){
    for(let i=1; i

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

    A well explained closure from the start till the middle and en of the lecture. I thought I understood. ....but i didn't.. it is not easy. I am tired of this closure thing. I am not going to give up.

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

    I would have watch this video earlier.. Everytime when I was attending the the closure concept was appearing in the question list and everytime I confused a lot even I read I remember the code without understanding..
    Thank you!

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

    Apart from creating a function inside the for loop and calling it explicitly or using IIFE(Immediately Invoked Function Executions), we can also use another way to make the example code work by passing the for loop variable to a let variable and creating a block scope for that variable.
    Example:
    function closures() {
    for(var i=0; i {
    console.log(x)
    }, 1000)
    }
    console.log('hi');
    }
    closures();

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

      you have forgot to multiply x with 1000

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

      That's cool. But the question there was not to use 'let' ...

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

    after watching namste JS i am in love with JS, and "time tide and JS waits for none " it was actually a good joke and nice Quote by you .

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

    Best JavaScript tutorial video I have ever watched !!

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

    One of the mind boggling topic of this entire series

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

    Vinoth love >> Akshay :
    Finally one more thing learn from closure...with block scope example... really great...
    Actually i pass the video around 10min thinking like why is coming continually
    6
    6
    6 and etc. till 5 time... but not able to answered myself .. then i watched next frame then i got it because of its referring same memory space of "i" - clear : ) ....

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

    We can also achieve the same using Promises
    ->
    const display = (i,delay) => {
    return new Promise(resolve => {
    setTimeout(() => {
    console.log(i) ;
    resolve() ;
    }, delay);
    })
    }
    async function count() {
    try {
    for (var i = 1 ; i < 6 ; i++) {
    await display(i,1000) ;
    }
    console.log("SUCCESS") ;
    } catch (error) {
    console.log(error) ;
    }
    }
    count() ;

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

    I jst appeared for an interview today, and the same loop question was asked to me, coudnt answer it kyunki maine Namaste JS ka ye video nahi dekha tha. But no worries, next interview mein hum phodenge. Thanks Akshay for sharing this kind of knowedge