я добавил внешнюю функцию, чтобы анонимная функция в setTimout запоминала индекс массива. Без неё он просто вызывал последнюю добавленную функцию несколько раз, из за того что анонимная функция замыкалась на i