Dat Ding heisst "Cache" - Cash gibts Wechselgeld an der Kasse...
Den Browser interessiert beim Laden der Resourcen nicht, ob das Element versteckt ist oder nicht - er fordert es von Server an und lädt es herunter. Und weil der Browser sich so verhält, werden auch versteckte Bilder erst heruntergeladen, bevor die Seite angezeigt wird.
Das "nachladen" von Bildern per JS hat einen Vorteil: es kann asynchron geschehen, d.h. während die Seite schon angezeigt wird und der Benutzer liest, lädt der Browser im Hintergrund neue Bilder (Resourcen) nach.
Der Browser Cache ist wieder was ganz anderes. Wenn der Browser eine Resource lädt, merkt er sich den Zeitpunkt. Für eine gewisse Zeit bleibt die Resource für ihn gültig, d.h. wenn eine Resource angefordert wird, schaut der Browser erstmal in seinem Cache nach, ob sie dort noch liegt und ob sie noch gültig ist. Fall ja, wird die Anforderung aus dem Cache erfüllt und gar nicht erst an den Server geschickt. Falls die Resource zwar vorhanden ist, aber die Gültigkeit abgelaufen ist, fordert der Browser sie beim Server neu an und aktualisiert seinen Cache.
Das kann zum Problem werden, wenn das Bild dynamisch aus einem Script generiert wird. Der Aufruf zum Script bleibt gleich, aber der Inhalt ändert sich. Der Browser kann das nicht feststellen, da er (aufgrund der gleichen Anforderung) annimmt, das Bild wäre immer noch unverändert. Abhilfe schafft hier ein Timestamp, den man dem Script übergibt - es bedeutet für den Browser "neue Resource" die noch nicht in seinem Cache liegt.