I've been trying to get a bunch of open source projects to compile, and a lot of the older ones have issues like:
function foo(bar) { do_something(bar); var bar = 0; ... }
which results in "ERROR: Redefinition of variable 'bar'.
At first I thought the projects were just broken... but this is such a common pattern, across lots of different projects, that I'm assuming the behavior here has changed, and this used to compile successfully. Is there a hidden flag that would let it compile again?
I was also surprised to get errors for code like:
function foo(a) { var x = 0; if (a) { for (var x = 0; x < 10; x++) { // ... } } }
While such code is asking for trouble, I'd expect more of a warning than an error.
Finally I found one interesting case thats sort of a combo:
function foo(a, i) { for (var i = 0; i < a.size(); i++) { // do something } // a is an array a.add(i); }
Since I'd been mechanically fixing a few of these, my initial fix was to drop the "var" on the i in the for loop, but then we end up adding a number to the end of the array, when i was in fact a string. Doing this broke the app in such an obvious way that I have to think that at one time, this actually "worked". The i in the for loop was scoped to the for loop, and a.add(i) added the original value of i to the array.
Can anyone comment on whether the behavior really has changed? And if there are flags to get the old behavior back?