quando viene lanciata la funzione definita in setTimeout sono passati 2 secondi, il ciclo è già terminato e la variabile i è valorizzata con 4. Nell'array sono definiti 4 elementi(da 0 a 3) quindi l'elemento con indice 4 è sempre undefined.