3 ms·
You can't re-use a variable name inside a scope without clobbering the value of the variable outside of the scope. You can in Javascript via the `var` keyword.
by cheald 14y ago
You can't re-use a variable name inside a scope without clobbering the value of the variable outside of the scope. You can in Javascript via the `var` keyword.
The issue's been beaten to death, and the consensus among the pro-Coffeescript crowd is that it's acceptable, because you shouldn't be shadowing variables anyway, and the consensus amoung the anti-Coffeescript crowd is that it's terrible because it removes control from the developer.
- debacle 14y agoThat's one of the stupidest things I've ever heard.
- __david__ 14y agoThat's because you didn't spend two hours the other night tracking down a bug caused by upgrading to the latest coffeescript in which they removed shadowing on loop variables. In a point release.
- debacle 14y agoI'm not sure what you mean by 'removed shadowing on loop variables,' but in general there's a reason that lexical scope exists - so variables can be reused. Why prevent variables from being reused?
- __david__ 14y agoIn coffeescript 1.3.1 this code: a = 3 b = -> for a in [6,7,8] c = a b() console.log(a) would print "3". In coffeescript 1.3.3 it prints "8". The solution is either to rename one of the 'a' variables or add `var a` in the b() function. Coming from C where I always (ok 99% of the time) do: for (int i=0; ...) the loop scoping rules in the 1.3.1 version of coffeescript felt natural. The 1.3.3 change feels stupid.