[править]
Скорее всего, функция завершается и снова вызывает себя перед загрузкой изображения, поэтому изображение не кэшируется.Загрузите изображения в постоянное хранилище (например, массив), которое хранится до тех пор, пока все они не будут загружены и кэшированы.
[/ edit]
Вам не нужно ждать, пока DOM будетготовность к загрузке изображений:
var bannerCount = 0;
var bannerImgsArr = ['image1.jpg','image2.jpg','image3.jpg','image4.jpg'];
var imageArray = [];
for (var i=0, iLen=bannerImgsArr.length; i<iLen; i++) {
imageArray[i] = new Image();
imageArray[i].src = bannerImgsArr[i];
}
Теперь, когда DOM готов, вы можете использовать одно из предварительно загруженных изображений.
...
cat.src = imageArr[bannerCount].src;
...