Created
April 9, 2011 21:32
-
-
Save tobi/911797 to your computer and use it in GitHub Desktop.
wtf.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var ary = ['a', 'b', 'c']; | |
| var funcs = []; | |
| for (var i = 0; i < ary.length; i++) { | |
| var c = ary[i] | |
| funcs.push(function() { console.log(c) }) | |
| }; | |
| for (var i = 0; i < funcs.length; i++) { | |
| funcs[i](); | |
| }; |
I think, the same c is visible to all function, which have the latest assigned value.
as variable scope in javaScripts is only function level so you can initialize var c in function that will work,
funcs.push(function() { var c = ary[i]; console.log(c) })
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is one reason I like forEach and other functional friends...
...will work how you want. Or even better:
Older browsers don't have these functions, but they can easily be added: https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js#L182-210
If performance is critical you may want to use the traditional for loop, since using forEach incurs a function call per item.
I wish something like this would work but it doesn't quite...