Javascript window.requestAnimationFrame是否执行线程处理?
Javascript window.requestAnimationFrame是否执行线程处理?,javascript,html,stack-overflow,requestanimationframe,Javascript,Html,Stack Overflow,Requestanimationframe,window.requestAnimationFrame函数是否创建新线程,以使调用它的函数与函数本身并行运行?因为我不明白为什么下面的代码不会导致堆栈溢出 window.requestAnimationFrame调用main和main调用window.requestAnimationFrame等等 w.rAF->main->w.rAF->main->w.rAF main.js function main(currentTime){ window.requestAnimationFram
window.requestAnimationFrame
函数是否创建新线程,以使调用它的函数与函数本身并行运行?因为我不明白为什么下面的代码不会导致堆栈溢出
window.requestAnimationFrame
调用main
和main
调用window.requestAnimationFrame
等等
w.rAF
->main
->w.rAF
->main
->w.rAF
main.js
function main(currentTime){
window.requestAnimationFrame(main);
console.log(currentTime);
}
window.requestAnimationFrame(main);
index.html
<script src="main.js"></script>
否。传递给requestAnimationFrame
的函数是排队的,而不是线程化的。requestAnimationFrame
告诉浏览器在渲染下一帧之前运行该函数。
如果再次在main中调用requestAnimationFrame
,它将把该函数放在下一个(而不是当前)animationFrame的队列中
在Javascript中,只有工作线程
requestAnimationFrame
是一个特殊函数,用于在事件循环的特定点执行代码。我发现这段视频非常有助于解释事件循环的工作原理:
那么为什么没有堆栈溢出?我的意思是如何到达
console.log
行?将函数放入队列与调用函数不同。这与使用setTimeout
几乎相同。这只是一个不同的队列。谢谢,我现在明白了。网上已经有一个类似的问题。这只是一个异步函数调用,我对它很熟悉,因为有颤振(dart)。