> Стрелочная функция здесь анонимная с параметром j в который попадает значение i за каждой итерацией?
Это так.
> Эта строка нужна чисто чтобы заполнить пустой массив, создав клон массива?
Да.
Void очищает память после выполнения.
SetTimeout и SetInterval в браузере сделаны очень плохо(есть утечки памяти). Для этого добавлен void.
Вот модель этих futures в браузере на request animation frame.
RR = {
// Modern TimeOut and Interval
interval: ( c, d = 1000, o = null ) => {
if( c ) {
//let hash = RR.md5( c.toString() );
let dn = Date.now, start = dn(), stop;
//console.log('Interval '+ hash +' started');
let cnt = 0;
let interval = async () => {
let n = dn() - start < d;
if( !n && o ) {
stop = 1;
//console.log('Timeout '+ hash +' stoped');
}
n || ( start += d, c.call( /*hash*/ ) );
stop || await void self.requestAnimationFrame( interval );
cnt++;
};
void self.requestAnimationFrame( interval );
return {
stop: () => {
stop = 1;
//o ? console.log('Timeout '+ hash +' stoped by task') : console.log('Interval '+ hash +' stoped by task');
}
};
}
else {
console.log('Interval: Callback function not defined');
}
},
};
Даже в этом коде loop не завершается. Таймер продолжает тикать до бесконечности.
console.log(`fib[${i}] = ${fib[i]}`)
Я просто не понял зачем вы это делаете?