CoffeeScriptでは基本的に、
ローカルスコープの外側で宣言された変数と同名の変数を
ローカルスコープ内で別の目的で使えない。
外側の変数を書き換えちゃうからね。
ちょっと古い記事だけど、どんな問題があるかはこちらとかを参考に。
http://www.sixapart.jp/techtalk/2012/01/coffeescript.html
自分は、今のところ問題になった事ないし、
自分が把握して書いている範囲であれば、今後もあまり問題ないかなぁと思う。
けど、複数人で作業する場合や、
joinオプションで連結とかで事故が起こるのは、
確かにちょっとありそうですね。
CoffeeScriptには明示的にレキシカルスコープを宣言する構文はありませんが、
抜け道を見つけたのでメモっておく。
ただ、常に明示的に宣言を書いて使い分けない限りは、
上記の問題は回避できないです。
CoffeeScriptが好きな人は、
そんな使い方しないと思うけど、
ちょっと同じ名前を使いたい時とかには使えると思う。
hoge = 'hoge'
do ->
`var hoge` #ここ
hoge = 'fuga'
console.log hoge
do ->
console.log hoge
単純にjsとしてムリヤリ出力しているだけです。
ちなみに、ローカルのみで使っても、
var hoge
が2回出力される事はありませんでした。
do ->
`var hoge` #ここ
hoge = 'fuga'
console.log hoge