Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用setTimeout注册的函数何时调用?_Javascript_Settimeout_Execution - Fatal编程技术网

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循环。

这是什么意思?你的问题有点含糊。