こういうのを望んでいるなら、不可能。
var i = 10; [1,2,3, ... ,99,100].each(function(i) { // 何かの処理 }); console.log(i); // 10と出て欲しい
jashkenasはこう主張している
if they do clash, shadowing the variable is the wrong answer. It completely prevents you from making use of the original value for the remainder of the current scope. Shadowing doesn't fit well in languages with closures-by-default ... if you've closed over that variable, then you should always be able to refer to it.
衝突が起こるとしても、変数の隠蔽(shadowing)は間違った解決法だ。スコープ内のその他のすべての変数に関して、オリジナルの値の利用を完全に塞いでしまう。隠蔽は、クロージャが標準(closures-by-default)な言語にはうまくマッチしない。その変数を閉じ込めているならば、常に参照出来るべきだ。
ソース:http://www.sixapart.jp/techtalk/2012/01/coffeescript.html
そんなに高尚な話なのか? var i = 0;for (var i in points) { console.log(points[i]);console.log(i); Cでfor (i = ...だったらわかるけど、C++やJavaでせっかくfor (int i = ...になったのに