JS Closures question 1

What is wrong with this piece of code?

1
2
3
4
5
for (var i = 0; i < 5; i++) {
    setTimeout(function () {
        console.log(i);
    })
}

Solution:

It won’t work as expected, and it will print 5 five times instead of printing 0 1 2 3 4.

In this code, console.log(i) is written inside setTimeout which will execute later, once the execution of for-loop finishes, and at that time value of i will be equal to 5(exit condition of for-loop). That is why it will print 5.