【问题标题】:Does window.requestAnimationFrame perform threading? [duplicate]window.requestAnimationFrame 是否执行线程? [复制]
【发布时间】:2020-12-20 14:10:58
【问题描述】:

window.requestAnimationFrame 函数是否创建新线程以让调用它的函数和函数本身并行运行?因为我不明白为什么下面的代码不会导致堆栈溢出。

window.requestAnimationFrame 调用mainmain 调用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>

【问题讨论】:

  • 几乎和你使用setTimeout一样。这只是一个不同的队列。
  • 谢谢,我现在明白了。网上已经有类似的问题了。它只是一个异步函数调用,由于颤振(飞镖),我对此非常熟悉。

标签: javascript html stack-overflow requestanimationframe


【解决方案1】:

requestAnimationFrame 告诉浏览器在渲染下一帧之前运行该函数。 如果您再次在 main 中调用 requestAnimationFrame,它将将该函数放入下一个(不是当前)animationFrame 的队列中。

在 Javascript 中,只有工作线程是线程化的。

requestAnimationFrame 是一个特殊函数,用于在事件循环中的特定点执行代码。我发现这个视频对解释事件循环的工作原理很有帮助: https://www.youtube.com/watch?v=cCOL7MC4Pl0

【讨论】:

    【解决方案2】:

    没有。传递给requestAnimationFrame 的函数是排队的,而不是线程的。

    【讨论】:

    • 那么为什么没有堆栈溢出?我的意思是如何到达console.log 行?
    • 将函数放入队列与调用函数不同。
    猜你喜欢
    • 2021-01-05
    • 2014-08-08
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2020-07-27
    相关资源
    最近更新 更多