Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript window.requestAnimationFrame是否执行线程处理?_Javascript_Html_Stack Overflow_Requestanimationframe - Fatal编程技术网

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)。