DevMan Плохой вариант то... Точнее, в реальной жизни может легко получиться так, что сначала не будет происходить ничего, а потом все картинки сменятся за доли секунды. А все потому, что пока браузер грузит изображение, изменений видимых нет, а время тикает. Поэтому тут должен быть вариант сложнее, с отслеживанием готовности изображение по событию load и только тогда начинать отсчет до следующего изменения. Поэтому interval тут не очень, надо timeout после каждого изменения.
Во-первых, читайте основы.
Индексы в JS осчитываются от 0. Вы написали i <= images.length, при этом images.length в вашем случае равно 4. То есть i в конце концов будет равен 4, т.е. несуществующему элементу списка.
Во-вторых, зачем вы вызываете функцию окей из нее же? Ведь setInterval изначально выполняет код много раз.