Javascript 为什么对requestAnimationFrame(render)的调用通常放在渲染函数的顶部,从而递归地调用自身?

Javascript 为什么对requestAnimationFrame(render)的调用通常放在渲染函数的顶部,从而递归地调用自身?,javascript,rendering,Javascript,Rendering,我在很多例子中都看到了它,甚至经常在官方文档中以某种形式使用requestAnimationFrame。例如: var render = function () { requestAnimationFrame(render); cube.rotation.x += 0.1; cube.rotation.y += 0.1; renderer.render(scene, camera); }; 为什么requestAnimationFrame将放在函数体的顶部?在我看来,这可能会导

我在很多例子中都看到了它,甚至经常在官方文档中以某种形式使用
requestAnimationFrame
。例如:

var render = function () {
  requestAnimationFrame(render);
  cube.rotation.x += 0.1;
  cube.rotation.y += 0.1;
  renderer.render(scene, camera);
};
为什么
requestAnimationFrame
放在函数体的顶部?在我看来,这可能会导致调用堆栈或执行环境的拥塞,因为如果
render
函数在其函数体的其余部分完成执行之前被
requestAnimationFrame
调用,会发生什么情况,因为下一个动画帧可用??(所有后续呼叫都是一样的,会造成阻塞)

在我看来,直观地看,将
requestAnimationFrame(render)放在下面似乎更明智语句作为函数体的最后一个语句。因此,通过这种方式,函数的其余部分始终保证已完成执行,直到再次调用渲染函数为止


是否有一些我遗漏或误解的内部机制,将其放在首位实际上是推荐的方法,或者为什么经常看到它?请帮助我理解,谢谢。

在显示当前帧之前将不会调用
渲染
函数,而只有在返回当前对
渲染
的调用后才会调用该函数

假设您当前正在计算第n帧。调用
requestAnimationFrame
时,给定的回调将在第(n+1)帧的队列中排队。只有在显示当前帧后,才会处理下一帧

非常好地描述了帧生命周期及其与
requestAnimationFrame
的关系