This doesn't bother me at all. Mostly because this feature comes from Ruby and so I'm already used to it, but also because it takes away the nasty surprise that JavaScript gives you if you leave 'var' out. I find this invaluable. As for knowing whether or not a new variable is being declared, well, that's why you keep your functions (and therefore your scopes) short.
> This doesn't bother me at all. Mostly because this feature comes from Ruby and so I'm already used to it
This and that are completely orthogonal though, I've been using Python for 8 years and Ruby for 6 so I'm used to implicit scoping. Doesn't mean I like it, or find it a good idea to use it in new languages (I don't).
And the issue is actually bigger in coffeescript than in ruby and python both, interestingly because (through javascript) coffeescript's scoping is much more regular than Python's or Ruby's.
The only language in which I don't know implicit scoping to be an issue is Erlang, because it uses bind-once and immutable structure semantics.
> also because it takes away the nasty surprise that JavaScript gives you if you leave 'var' out.
That can trivially be fixed by linting, or using strict mode. That's really no argument.