let numbers = ["1", "2", "3"];
const squareNumber = (i, cb) => {
i = parseInt(i);
setTimeout(() => cb(null, i * i), 100);
}
for (let i of numbers) {
squareNumber(i, (err, result) => {
console.log(i + " " + result);
});
}
// output:
// 3 1
// 3 4
// 3 9
// expected:
// 1 1
// 2 4
// 3 9
If I remove setTimeout, I can get the expected result.
Or it can be written like this:
for (let i of numbers) {
((i) => {
squareNumber(i, (err, result) => {
console.log(i + " " + result);
});
})(i);
}
Could this be a bug in JavaScript?