JS中定时器线程理解

栏目: JavaScript · 发布时间: 6年前

内容简介:最近在准备面试,对于JS原理性的文章,感觉很有必要系统整理下,不必每一次都要查询资料,节约时间。大家觉得这个定时器定时时间设为0,有意义吗?是否觉得上述代码效果等同于实践是检验真理的最好途径。我们不排斥拿来主义,但是如果能自己实践验证,对于提升自身格物致知的精神很有裨益。针对上述问题,我们用两个实验来解开答案:

最近在准备面试,对于JS原理性的文章,感觉很有必要系统整理下,不必每一次都要查询资料,节约时间。

问题

setTimeout(function(){
    console.log("开始执行定时器回调: "+ new Date())
    console.log("我是定时器")
},0)

大家觉得这个定时器定时时间设为0,有意义吗?是否觉得上述代码效果等同于

console.log("开始执行定时器回调: "+ new Date())
console.log("我是定时器")

实践是检验真理的最好途径。我们不排斥拿来主义,但是如果能自己实践验证,对于提升自身格物致知的精神很有裨益。针对上述问题,我们用两个实验来解开答案:

实验一:

console.log("1")
console.log("我是定时器")
console.log("2")

打印结果

JS中定时器线程理解

实验二:

console.log("1")
setTimeout(function(){
    console.log("我是定时器")
},0)
console.log("2")

打印结果

JS中定时器线程理解

通过上述两个实验结果,我们可以得知 定时器定时为0时,JS执行到定时器这一步,并不是直接开始执行定时回调,而是执行了后续代码之后,才执行。

那为什么会这样呢?

我们仍然拿两个例子来说明:

实验三:

console.log("1")
    console.log("定时器线程开始计时: "+ new Date())
    setTimeout(function(){
        console.log("开始执行定时器回调: "+ new Date())
    },5000)
    for(var i=0;i<500;i++){
        console.log("我是循环")
    }
    console.log("事件队列最后一位: "+ new Date())

打印结果:

JS中定时器线程理解

从结果中可以看出,从定时器线程开始定时,到定时5秒结束后,将定时回调事件放入事件队列中执行,用了5秒。

实验四:

console.log("1")
    console.log("定时器线程开始计时: "+ new Date())
    setTimeout(function(){
        console.log("开始执行定时器回调: "+ new Date())
    },5000)
    for(var i=0;i<50000;i++){
        console.log("我是循环")
    }
    console.log("事件队列最后一位: "+ new Date())

打印结果:

JS中定时器线程理解

从结果中可以看出,从定时器线程开始定时,到定时5秒结束后,将 定时回调事件 放入 事件队列 中执行,用了9秒。

两次结果不一致,是因为JS代码执行到定时器时,此时 定时器线程 开始定时,定时时间到之后,将 定时回调事件 推入 事件队列最后 ,JS线程依据 事件队列 中顺序执行。而之所以有的延时5秒,有的延时9秒,是因为如果定时器开始计时时, JS事件队列 中执行剩余的事件小于5秒,则定时结束后,将 定时回调事件 推入队列中,JS能够立即执行 定时回调事件 ,所以是5秒;而如果 JS事件队列 中执行剩余的事件大于5秒,那么在定时结束后,将 定时回调事件 推入队列后,还需一些时间来执行 定时回调事件 之前的事件,所以为9秒。

JS中定时器线程理解


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

跨越鸿沟

跨越鸿沟

[美] 杰弗里·摩尔(Geoffrey A. Moore) / 赵娅 / 机械工业出版社 / 2009-1 / 36.00元

在真正涉足高科技领域之前,你有必要读一读这本书——在这个节奏飞快、竞争激烈的技术竞技场上,这本书绝对能够帮助你更容易地获得成功。 ——威廉姆·劳森 罗盛软件公司董事会主席兼CEO 最近40年来,本书对高科技营销各个方面所做出的贡献远远超过了其他任何相关书籍。如今已经有无数企业和大学分别在自己的运营和教学过程中引入了鸿沟思想,如果你还不是这些企业或大学中的一员,你可能就要担心自己的未来了......一起来看看 《跨越鸿沟》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具