Javascript 为什么requestAnimationFrame的许多示例在回调之外调用requestAnimationFrame?

Javascript 为什么requestAnimationFrame的许多示例在回调之外调用requestAnimationFrame?,javascript,requestanimationframe,Javascript,Requestanimationframe,我在网上看到的许多RequestAnimationFrame示例都两次调用该函数:在回调内部和外部。我理解为什么我们称之为内在;但是,有什么理由我们叫它外面吗 这是在下一个动画帧对步骤的初始调用;它实质上是启动动画。如果没有它,您将拥有以下功能: let myReq; function step(timestamp) { myReq = requestAnimationFrame(step); console.log(timestamp, myReq) if(timestamp &

我在网上看到的许多RequestAnimationFrame示例都两次调用该函数:在回调内部和外部。我理解为什么我们称之为内在;但是,有什么理由我们叫它外面吗


这是在下一个动画帧对步骤的初始调用;它实质上是启动动画。如果没有它,您将拥有以下功能:

let myReq;

function step(timestamp) {
  myReq = requestAnimationFrame(step);
  console.log(timestamp, myReq)
  if(timestamp >= 1000) {
    cancelAnimationFrame(myReq);
  }
}
…在这种情况下,我们永远不会有调用方执行步骤,也永远不会调用它

或者,您可以在初始调用步骤时忽略requestAnimationFrame包装器:


但是,第一次调用步骤时,它不一定要等待第一个可用的动画帧。

外部调用正在启动请求?哈!这是第一个画面!完全有道理!
let myReq;

function step(timestamp) {
  myReq = requestAnimationFrame(step);
  console.log(timestamp, myReq)
  if(timestamp >= 1000) {
    cancelAnimationFrame(myReq);
  }
}
let myReq;

function step(timestamp) {
  myReq = requestAnimationFrame(step); // I understand why we call it here.
  console.log(timestamp, myReq)
  if(timestamp >= 1000) {
    cancelAnimationFrame(myReq);
  }
}

myReq = step;  // why invoke rAF here.