В общем вот такой код:
var tr = ['test','test1','test2','test3'];
		var t  = 5000;
		var s = performance.now();
		for(var i in tr) {
			requestAnimationFrame(
				function frame(d) {
					// g - time gone
					var g = d - s;
					// time escape preventing
					if (g > t) { 
						g = t;
					}
					console.log(tr[i])
					// animation time is over? if not next frame
					if (g < t) {
						requestAnimationFrame(frame);
					} 
				}
			);
		}
Расконсоливание выводит одну и ту же переменную из массива.
Что это следствие кэширования, где-то моя тупость из-за усталости или фича.
Обойти можно вот так:
var tr = ['test','test1','test2','test3'];
		var t  = 5000;
		var s = performance.now();
		for(var i in tr) {
			(function animloop(x) {
				requestAnimationFrame(
					function frame(d) {
						// g - time gone
						var g = d - s;
						// time escape preventing
						if (g > t) { 
							g = t;
						}
						console.log(x)
						// animation time is over? if not next frame
						if (g < t) {
							requestAnimationFrame(frame);
						} 
					}
				);
			})(tr[i]);
		}
тоесть оборачиванием в iife мы устраняем эффект "кэширования" функции.
Это что? Фича такая или я уже замылился и что-то натупил?