Rahul R Jain’s Post

🚀 A Classic JavaScript Interview Question That Still Confuses Developers This question shows up in many frontend interviews 👇 ❓ What will be the output? for (var i = 0; i < 3; i++) { setTimeout(() => { console.log(i); }, 1000); } 🤔 What Most People Expect 0 1 2 ✅ Actual Output 3 3 3 🔍 Why Does This Happen? 👉 var is function-scoped, not block-scoped That means: • There is only one shared variable i • All callbacks reference the same i • By the time setTimeout runs, the loop has finished • Final value of i becomes 3 So every callback prints 3 🧠 Key Concept This question tests: ✔ Closures ✔ Execution context ✔ Event loop behavior 💡 How to Fix It ✅ Using let (block scope) for (let i = 0; i < 3; i++) { setTimeout(() => { console.log(i); }, 1000); } ✔ Output: 0 1 2 ✅ Using IIFE (closure fix) for (var i = 0; i < 3; i++) { ((index) => { setTimeout(() => { console.log(index); }, 1000); })(i); } 🎯 Interview Insight This is not about syntax… 👉 It’s about understanding how JavaScript handles scope and closures And that’s exactly what interviewers are testing. 💬 Have you ever been asked this question in an interview? #JavaScript #FrontendDevelopment #CodingInterview #Closures #WebDevelopment #ReactJS #FrontendEngineer #Programming 👉 Follow Rahul R Jain for more real interview insights, React fundamentals, and practical frontend engineering content.

yes Because var is # function scoped , not block-scoped. By the time setTimeout executes (after 1 second) the loop has already finished and the value of i becomes 3. So all callbacks reference the same variable, not a copy...⭐

See more comments

To view or add a comment, sign in

Explore content categories