I have couple of questions about the javascript for loop.
First question:
for (i=0; i<=2; i++) {;}
console.log(i);
Output is 3. Shouldn’t it be 2?
Second question:
for (var i=0; i<=2; i++) {
setTimeout(function(){console.log(i);}, i*1000);
}
Timeouts are set correctly: 0, 1000 and 2000. But the output is 3,3,3 (should be 0, 1, 2). Does this mean the delayed functions are executed after the loop exits? Why?
What should I read to understand all this mysterious javascript stuff?
Thank you.
First question:
No because the
ivariable is incremented after the last successful iteration, then the condition is checked and it evaluates tofalseso the loop ends.The
forstatement is composed by:And it is executed in the following steps:
initialExpressionis evaluated at the startconditionis evaluated, if it evaluates tofalse, the loop ends, if it evaluates totrue, the statement is evaluated.incrementExpressionis evaluated, go to step 2.Second question:
The function is executed asynchronously after the loop has ended, at this time as you know
icontains3.The common workaround for this is to use a function to preserve the value of the looping variable on each iteration, for example: