我试图了解setTimeout的执行方式。
在下面的示例中,我期望在控制台日志中看到“ Inside setTimeout”作为第二行。
但是,我总是在控制台日志的第三行看到“ Inside setTimeout”。
这是我在日志中始终看到的内容:
First
Last
Inside setTimeout
知道为什么会这样吗?
<script>
console.log('First');
// NOTE: 0 milliseconds.
setTimeout(function() {console.log('Inside setTimeout')}, 0);
console.log('Last');
</script>
即使超时为0毫秒,它仍将函数调度为异步调用。setTimeout
工作方式是:
稍后,经过指定的时间后,浏览器将使一个任务排队以调用该函数,当处理该函数前面的任务时,事件循环将对其进行处理。
它永远不会立即调用该函数。那会很混乱;通过始终异步调用它,它是一致的。(这也是为什么即使已经解决了Promise总是总是异步调用Promisethen
和catch
处理程序的原因。)
所有这些细节都在规范中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句