Javascript 设置超时和同步
具有以下代码:Javascript 设置超时和同步,javascript,Javascript,具有以下代码: <script type="text/javascript" src="script.js"></script> <script type="text/javascript" src="script2.js"></script> script2.js: setTimeout(function(){ console.log("second"); }, 10); 运行它时,我得到了不同的结果。一次输出为: second fi
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="script2.js"></script>
script2.js:
setTimeout(function(){
console.log("second");
}, 10);
运行它时,我得到了不同的结果。一次输出为:
second
first
但另一次:
first
second
由于给定的时间延迟,它不应该总是“第二,第一”顺序吗?我有三种方法来解决你的问题
function first(){
second();
setTimeout(function(){
console.log("first");
}, 10);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
function first(){
setTimeout(function(){
console.log("first");
}, 11);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
function first(){
second();
setTimeout(function(){
console.log("first");
}, 10);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
function first(){
setTimeout(function(){
console.log("first");
}, 11);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
var flag = false; //global variable
function first(){
setTimeout(function(){
if(flag){
console.log("first");
}else{
first();
}
}, 10);
}
function second(){
flag = true;
setTimeout(function(){
console.log("second");
}, 10);
}
我有三种方法来解决你的问题
function first(){
second();
setTimeout(function(){
console.log("first");
}, 10);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
function first(){
setTimeout(function(){
console.log("first");
}, 11);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
function first(){
second();
setTimeout(function(){
console.log("first");
}, 10);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
function first(){
setTimeout(function(){
console.log("first");
}, 11);
}
function second(){
setTimeout(function(){
console.log("second");
}, 10);
}
var flag = false; //global variable
function first(){
setTimeout(function(){
if(flag){
console.log("first");
}else{
first();
}
}, 10);
}
function second(){
flag = true;
setTimeout(function(){
console.log("second");
}, 10);
}
你有一个简单的比赛条件 规范保证脚本文件按顺序运行。这意味着浏览器可以尝试同时下载文件,但即使在script.js之前加载script2.js,script.js也会首先运行
但是,如果script.js加载速度很快,并且在script2.js仍在从服务器下载时执行,则在执行script2.js之前至少有5毫秒的时间。如果发生这种情况,将首先执行script.js中的超时,输出将是
first,second
您有一个简单的竞争条件
规范保证脚本文件按顺序运行。这意味着浏览器可以尝试同时下载文件,但即使在script.js之前加载script2.js,script.js也会首先运行
但是,如果script.js加载速度很快,并且在script2.js仍在从服务器下载时执行,则在执行script2.js之前至少有5毫秒的时间。如果发生这种情况,script.js中的超时将首先执行,输出将是
第一,第二
我假设OP想说,他有2个设置超时
,并希望同步它们。给定,您刚刚在学习,或者这两个问题都是为了解决一个问题——你是否有一个潜在的问题/你想解决的问题?@James Thorpe-更正我假设OP想说,他有2个setTimeout
并想同步它们。既然如此,你只是在学习,或者这两个问题都是试图解决一个问题-你有一个潜在的问题/你想解决的问题吗?@James Thorpe-corrected@James Thorpe:所以浏览器分别下载脚本,在执行同步到第一次运行脚本1和完成脚本2时取消同步线程?@Mulligan81本质上是的。但是,如果script2还没有完成下载,它就无法执行它,同时script1中的超时时间已经在滴答滴答地流逝@James Thorpe:所以浏览器在单独的、不同步的线程中下载脚本,同时执行同步到第一次运行脚本1,当脚本2完成时?@Mulligan81基本上是的。但是,如果script2还没有完成下载,它就无法执行它,同时script1中的超时已经在滴答作响了