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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|