有代码:
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="script2.js"></script>
脚本.js:
setTimeout(function(){
console.log("first");
}, 15);
script2.js:
setTimeout(function(){
console.log("second");
}, 10);
运行时我得到了不同的结果。一次输出为:
second
first
但是另一次:
first
second
由于给定的时间延迟,它不应该始终处于“第二,第一”顺序吗?
最佳答案
你有一个简单的竞争条件。
规范保证脚本文件按顺序运行。这意味着浏览器可以同时尝试下载文件,但即使 script2.js 在 script.js 之前加载,script.js 也会先运行。
但是,如果 script.js 加载速度很快并在 script2.js 仍在从服务器下载时执行,则有可能在 script2.js 执行之前至少要经过 5 毫秒。如果发生这种情况,script.js 中的超时将首先执行,输出将为 first, secondary
。
关于javascript - setTimeout和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741328/