So I have a block of code like this:
var hello3 = [];
function testfunc3() {
let i = 0;
while (i < 10) {
hello3[i] = {
another3: function() {
return i;
}
};
i++;
}
}
function alertnow3() {
alert(hello3[6].another3());
}
When I call testfunc3 first, and then call alertnow3, the alert I am getting is "10"
Then I changed the code block to this:
var hello1 = [];
function testfunc1() {
for (let i = 0; i < 10; i++) {
hello1[i] = {
another1: function() {
return i;
}
};
}
}
function alertnow1() {
alert(hello1[6].another1());
}
Now when I call testfunc1 first, and then call alertnow1, the alert I am getting is "6"
Then I changed the code to this:
var hello2 = [];
function testfunc2() {
for (let i = 0; i < 10; ) {
hello2[i] = {
another2: function() {
return i;
}
};
i++;
}
}
function alertnow2() {
alert(hello2[6].another2());
}
Now when I call testfunc2 first, and then call alertnow2, the alert I am getting is "7"
Why are the responses different for the 3 blocks of code? I was expecting all responses to be 6.
Here is a codesandbox link for you guys to check (All 3 cases given above is demonstrated in the code. Click on "Click Here" first and then "Alert Now": https://codesandbox.io/s/nostalgic-microservice-mtl1t?file=/src/App.js:329-577