Well, the problem is that the
variable i, within each of your anonymous functions, is bound to the
same variable outside of the function.
What you want to do is bind the variable within each function to a separate, unchanging value outside of the function:
What you want to do is bind the variable within each function to a separate, unchanging value outside of the function:
var funcs = [];
function createfunc(i) {
return function() { console.log("My value: " + i); };
}
for (var i = 0; i < 3; i++) {
funcs[i] = createfunc(i);
}
for (var j = 0; j < 3; j++) {
funcs[j](); // and now let's run each one to see
}
Since there is no block scope in JavaScript - only function scope -
by wrapping the function creation in a new function, you ensure that
the value of "i" remains as you intended.
0 comments:
Post a Comment
Don't Forget to comment