Как работает стрелочная функция в JS

Вот есть код который выполняет отрисовку фреймов из спрайта. Но не понятен момент со стрелочной функцией. Мы создаем стрелочную функцию без параметров и вызывает методы. А затем в window.requestAnimationFrame(loop) мы передаем нашу стрелочную функцию, но как? Как мы смогли передать функцию когда не закончили ее тело цикла?

start() {
        let loop = () => {
            this.update();
            this.render();

            window.requestAnimationFrame(loop);
        }
        window.requestAnimationFrame(loop);
    }

Ответы (1 шт):

Автор решения: Alex Krass

Переменные вычисляются в момент выполнения функции просмотром области видимости. Поэтому подставив заранее имя какой-то переменной, мы не получим ошибку, пока функция не начнет выполняться.

let loop = () => {
  print(someVariable);
}

//loop(); // приведет к ошибке т.к. не сможет найти print

let print = (param) => {
  console.log(param);
}

//loop(); // приведет к ошибке т.к. не сможет найти someVariable

someVariable = "ok";

// теперь все нормально, переменные будут вычислены тут и на этой точке они уже существуют.
loop(); 

То, что скрывается за переменной, функция или что-то еще, значения в данном случае не имеет.

→ Ссылка