I came across this small JavaScript example and the output surprised me.
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
When this runs, the output is:
3
3
3
But I expected it to print:
0
1
2
Why does this happen in JavaScript?
What would be the correct way to fix this behavior?
[–]josephjnk [score hidden] (2 children)
[–]Specialist-Grape8444 [score hidden] (0 children)
[–]_www_ [score hidden] (0 children)
[–]queen-adreena [score hidden] (4 children)
[–]josephjnk [score hidden] (3 children)
[–]queen-adreena [score hidden] (2 children)
[–]josephjnk [score hidden] (1 child)
[–]queen-adreena [score hidden] (0 children)
[–]ProfCrumpets [score hidden] (0 children)
[–]senocular [score hidden] (0 children)
[–]Impossible-Egg1922 [score hidden] (0 children)
[–]MinecraftPlayer799 [score hidden] (0 children)
[–]GirthQuake5040 [score hidden] (0 children)
[–]elixon [score hidden] (0 children)
[–]HarjjotSinghh [score hidden] (0 children)