В общем вот такой код:
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 мы устраняем эффект "кэширования" функции.
Это что? Фича такая или я уже замылился и что-то натупил?