Javascript 为什么setTimeout 0没有在函数末尾执行
我是Javascript新手,最近了解了setTimeout设置为0毫秒的用法。我试图实现它,但没有得到预期的结果。据我所知,它必须等到所有事件结束,但它的行为并不符合预期。请告诉我我错过了什么或哪里错了 index.html 我期待着像这样的事情Javascript 为什么setTimeout 0没有在函数末尾执行,javascript,Javascript,我是Javascript新手,最近了解了setTimeout设置为0毫秒的用法。我试图实现它,但没有得到预期的结果。据我所知,它必须等到所有事件结束,但它的行为并不符合预期。请告诉我我错过了什么或哪里错了 index.html 我期待着像这样的事情 Event 1 Processed !! Event 2 Processed !! Event 3 Processed !! Event 0 Processed !! 谢谢:)这些语句的执行时间为0到3000毫秒 据我所知,它必须等到所有的活
Event 1 Processed !!
Event 2 Processed !!
Event 3 Processed !!
Event 0 Processed !!
谢谢:)这些语句的执行时间为0到3000毫秒 据我所知,它必须等到所有的活动结束
不,它们应该等待指定的时间(0、1000、2000或3000毫秒)这些语句在0到3000毫秒之间执行 据我所知,它必须等到所有的活动结束
不,它们应该等待您指定的时间(0、1000、2000或3000毫秒)
setTimeout
,延迟0
等待当前调用堆栈清除,而不是事件队列。其他超时都将回调排队,因此它们不是调用堆栈的一部分
如果要立即调用日志函数,0超时将等待该函数完成,但不会等待其他超时。例如:
函数日志(n){
log(“事件”,n,“已处理!”);
}
setTimeout(log.bind(null,0),500);//等待0.5秒
setTimeout(log.bind(null,1),0);//等待堆栈清除
日志(2);//立即运行
设置超时
,延迟0
等待当前调用堆栈清除,而不是事件队列。其他超时都将回调排队,因此它们不是调用堆栈的一部分
如果要立即调用日志函数,0超时将等待该函数完成,但不会等待其他超时。例如:
函数日志(n){
log(“事件”,n,“已处理!”);
}
setTimeout(log.bind(null,0),500);//等待0.5秒
setTimeout(log.bind(null,1),0);//等待堆栈清除
日志(2);//当您有以下情况时,立即运行:
setTimeout(function () {
document.write("<p>Event 0 Processed !!</p>");
},0);
setTimeout(函数(){
写入(“事件0已处理!!”;
},0);
几乎可以说:
document.write("<p>Event 0 Processed !!</p>");
document.write(事件0已处理!!);
因为它在执行之前会等待0毫秒,所以请立即执行
如果希望顺序相反,则事件0的延迟需要最长 当您有此功能时:
setTimeout(function () {
document.write("<p>Event 0 Processed !!</p>");
},0);
setTimeout(函数(){
写入(“事件0已处理!!”;
},0);
几乎可以说:
document.write("<p>Event 0 Processed !!</p>");
document.write(事件0已处理!!);
因为它在执行之前会等待0毫秒,所以请立即执行
如果希望顺序相反,则事件0的延迟需要最长 您的意思是希望在setTimeout(…,0)之前看到调用setTimeout(…,1000)的结果?所有setTimeout
调用可能都是异步的。它们都被添加到“队列”中,并在当前函数完成后(以及经过的时间)运行。0ms应该发生在1000ms之前。您的意思是希望在setTimeout(…,0)之前看到调用setTimeout(…,1000)的结果?所有setTimeout
调用的可能重复都是异步的。它们都被添加到“队列”中,并在当前函数完成后(以及经过的时间)运行。0毫秒应该发生在1000毫秒之前。等待0毫秒和立即执行不是一回事。setTimeout
的文档非常清楚,当前上下文完成后,它将使回调排队执行,可能是立即执行,也可能是从不执行。@ssube是的,我知道它们不是一回事。但就OP而言,因为他似乎只是在学习,所以这是一个足够好的解释。你不是从CS课程开始学习细节,而是一步一个脚印地学习。等待0毫秒和立即执行不是一回事。setTimeout
的文档非常清楚,当前上下文完成后,它将使回调排队执行,可能是立即执行,也可能是从不执行。@ssube是的,我知道它们不是一回事。但就OP而言,因为他似乎只是在学习,所以这是一个足够好的解释。你不是从CS课程开始学习细节,而是一步一个脚印地学习。
document.write("<p>Event 0 Processed !!</p>");