for (var i in obj)
цикл предназначеный для перечисления ключей объекта, иногда можно использовать для массивов, но очень осторожно.
for(var i = 0; i<a.length; i++)
цикл для массивов, здесь индексы будут по порядку
UPD:
А чтобы переменную i не замыкало, её нужно передать в функцию в качестве аргумента
function func(i){
return function(){
console.log('Переменная i = ' + i + ', тип ' + typeof i);
}
}
for(var i in [9]) {setTimeout(func(i),0);}
for(var i in {1:2}) {setTimeout(func(i),0);}
в хроме выдает
Переменная i = 0, тип string
Переменная i = 1, тип string
Как видим оба значения типа string. Это происходит потому, что цикл "for in" приводит ключи и индексы к типу string