在 setTimeout() 函数中给出时间间隔有什么意义? 尽管回调必须等待调用堆栈完全清空。
例如,如果我写这段代码。
setTimeout(()=>console.log("2 sec Timeout"),2000)
无法保证 2 秒后准确运行。如果有其他代码花费的时间超过 2 秒,setTimeout 回调将必须等待其他代码运行,然后才会运行超时代码。检查下面的例子。
var c= ()=>{
setTimeout(()=>console.log("2 sec Timeout"),2000)
console.log("c");
}
var d= ()=>{
console.log("d");
for (let index = 0; index < 10000000000; index++) {
}
console.log("End of for loop");
}
var e= ()=>{
console.log("e");
for (let index = 0; index < 10000000000; index++) {
}
console.log("End of for loop");
}
c()
d()
e()
这里setTimeout代码必须等待d()而不是e()完成之后才会执行setTimeout代码。
是否有其他方法可以在所需的时间间隔之后准确执行所需的代码。
在 setTimeout() 函数中给出时间间隔有什么意义?
指定您想要的大致延迟。或者换句话说,给出代码应该运行多久的最低数字(虽然接受它可能会在之后运行)。
是否有其他方法可以在所需的时间间隔之后准确执行所需的代码。不,因为 JavaScript 在每个领域运行一个线程*(非常松散,每个全局环境等),并且使用作业队列工作,一旦作业启动,它就会运行到完成并且不能被另一个作业中断。因此,由于在您提供的确切时间发生时可能正在运行另一项作业,因此无法准确地安排它。
也就是说,这通常不是一个问题,除非代码错误地假设超时将在确切的时间后发生。