- В вашем цикле
for
запускаются 3 setInterval()
одновременно.
for (var i = 0; i < pictures.length; i++){
setInterval(function(){
$('body').css("background",pictures[i]);},5000);
}
}
- Внутри цикла используется переменная i, которая передаётся внутрь анонимной функции, то есть это замыкание.
Согласно логике работы замыканий, значение этой переменной внутри анонимной функции будет равно значению, которое оно принимает по окончании работы цикла, то есть всегда 3.
Алгоритм можно реализовать несколькими способами, но проще всего использовать один интервал и в каждой итерации этого интервала инкрементировать счётчик.
Рабочий код с описанием