in reply to
Re: [OT] Perl / Computer Science Science Fair Projects
in thread [OT] Perl / Computer Science Science Fair Projects
Unfortunately in JavaScript all variables are scoped to the nearest function call. So a literal translation does something very different:
for (var i = 0; i < some_array.length; i++) {
// Declaring this in the loop creates a one variable for
// all instances of the loop.
var x = some_array[i];
closures.push(function () {
// Do something using x. I'll just return it.
return x;
});
}
// All closures now point at the last element.
How annoying.
One of the joys of using the Mozilla Javascript environment exclusively is that that some of these issues have been dealt with. Javascript 1.7 introduced the
let keyword that deals with this scoping issue.
for (var i = 0; i < some_array.length; i++) {
// Declaring this in the loop creates a one variable for
// all instances of the loop.
let x = some_array[i];
closures.push(function () {
// Do something using x. I'll just return it.
return x;
});
} // now works as expected