问题描述
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
告诉浏览器在渲染下一帧之前运行该功能。
如果再次在主目录中调用requestAnimationFrame
,则会将该函数放在下一个(不是当前)animationFrame的队列中。
在Javascript中,只有工作线程是线程。
requestAnimationFrame
是一个特殊功能,用于在事件循环中的特定点执行代码。我发现这段视频对解释事件循环的工作原理很有帮助:
https://www.youtube.com/watch?v=cCOL7MC4Pl0