потому что из за замыканий, анонимная функция в setTimout сохраняет в себе ссылку на переменную i. Когда все функции запускаются i = последнему индексу и поэтому выводится последняя функция массива.