gpt4 book ai didi

javascript - Javascript 中是否按顺序执行相等的超时?

转载 作者:行者123 更新时间:2023-12-02 22:34:45 26 4
gpt4 key购买 nike

假设我愿意

setTimeout(foo, 0);

...

setTimeout(bar, 0);

我可以确定 foo 会在 bar 之前开始执行吗?如果我使用 1、10 或 100 的超时值代替 0,会怎么样?

简单的实验表明,在超时值相等的情况下,超时目标的执行顺序与 setTimeouts 本身的顺序相同,但是依赖这种行为安全吗?

最佳答案

依赖这种行为是不安全的。我编写了一个测试脚本,该脚本使用 setTimeout(..., 0) 调度许多函数(它们反过来也调度许多函数),并且调用函数的顺序并不总是正确的与调用 setTimeout 的顺序相同(至少在 Chrome 11 中,我用它来运行脚本)。

您可以在此处查看/运行脚本:http://jsfiddle.net/se9Jn/(该脚本使用 YUI 来实现跨浏览器兼容性,但 Y.later 内部使用了 setTimeout)。

请注意,如果您只是运行脚本并盯着控制台,您可能不会看到有问题的顺序。但是,如果启动脚本,切换到另一个选项卡,加载一些页面,然后返回测试页面,您应该在控制台中看到有关回调乱序的错误。

如果您需要保证顺序,我建议在上一个函数结束时安排下一个函数:

setTimeout(foo, 0);

...

function foo() {

...

setTimeout(bar, 0);
}

关于javascript - Javascript 中是否按顺序执行相等的超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1776239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com