DEV Community

Cover image for Javascript Questions
Esraa Refaat
Esraa Refaat

Posted on

Javascript Questions

đź’ˇ for (var i = 0; i < 3; i++)
{
setTimeout(() =>
console.log(i), 1);
}

for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}

A: 0 1 2 and 0 1 2
B: 0 1 2 and 3 3 3
C: 3 3 3 and 0 1 2

Answer: C
Because of the event queue in JavaScript, the setTimeout callback function is called after the loop has been executed. Since the variable i in the first loop was declared using the var keyword, this value was global. During the loop, we incremented the value of i by 1 each time, using the unary operator ++. By the time the setTimeout callback function was invoked, i was equal to 3 in the first example.

In the second loop, the variable i was declared using the let keyword: variables declared with the let (and const) keyword are block-scoped (a block is anything between { }). During each iteration, i will have a new value, and each value is scoped inside the loop.

Top comments (3)

Collapse
 
marks7e profile image
Marcos Barrera •

This is some tricky!
Thanks for share it!

Collapse
 
esraarefaat profile image
Esraa Refaat •

Thanks

Collapse
 
acamara2016 profile image
Adama Camara •

I'm seeing these question being the one asked the most in js interviews.