Javascript 使用setTimeout注册的函数何时调用?
它可能在执行“某些”普通代码后调用?但我不确定。。。Javascript 使用setTimeout注册的函数何时调用?,javascript,settimeout,execution,Javascript,Settimeout,Execution,它可能在执行“某些”普通代码后调用?但我不确定。。。 如果有一种足以描述javascript代码在浏览器中如何执行的大图,那就太好了。也许我不理解这个问题。。但这是直接从窗口中获取的 setTimeout(函数,毫秒) 此方法调用函数一次 在指定数量的 毫秒过去,直到取消 通过调用clearTimeout。方法 返回可在中使用的timerID 对clearTimeout的后续调用 取消间隔 基本上,该函数会在指定的毫秒数过后立即调用。浏览器执行线程大部分时间处于空闲状态,不运行任何代码。当您使
如果有一种足以描述javascript代码在浏览器中如何执行的大图,那就太好了。也许我不理解这个问题。。但这是直接从
窗口中获取的
setTimeout(函数,毫秒)
此方法调用函数一次
在指定数量的
毫秒过去,直到取消
通过调用clearTimeout。方法
返回可在中使用的timerID
对clearTimeout的后续调用
取消间隔
基本上,该函数会在指定的毫秒数过后立即调用。浏览器执行线程大部分时间处于空闲状态,不运行任何代码。当您使用setTimeout
注册要执行的某些函数时,它将在给定的毫秒数之后执行
现在:如果在给定的时间后,其他代码正在执行(如事件处理程序或长循环),则浏览器工作线程正忙,您的函数将不得不等待。考虑这个代码:
setTimeout(f, 500);
for(var i = 0; i < 10000000; ++i){
//...
}
setTimeout(f,500);
对于(变量i=0;i<10000000;++i){
//...
}
setTimeout
立即返回,允许执行循环。如果此循环运行超过500毫秒,它将不会被中断,f
函数将不得不等待。如果在例如490毫秒后触发一些较长的事件处理程序,也会发生同样的情况
将浏览器JS工作线程视为一个队列,包含一个使用者和多个生产者。队列中的某些项目可以立即提取(如事件处理程序),有些项目必须等待超时时间。Javascript是单线程的,使用调用堆栈运行,这本质上是先到先得的处理
setInterval和setTimeout函数在提供的持续时间过后将传递的函数放入调用堆栈。这里的区别在于,结果在那个时候并没有执行,它们只是被放入调用堆栈中,所以如果某个东西已经在运行,它将不会执行超时中提供的函数,直到您完成为止
例如:
var i = 0;
setTimeout(function() { i = 1; }, 10);
for (; i < 1;) {}
var i=0;
setTimeout(函数(){i=1;},10);
对于(;i<1;){}
即使在10毫秒后,将i设置为1的函数被调用,它只在调用堆栈上,并且在for循环完成之前不会生效,您也永远无法摆脱该for循环。这是什么意思?你的问题有点含糊。