zoukankan      html  css  js  c++  java
  • 定时器引发的思考

    定时器真是定时执行吗?

    定时器是如何实现的?

    做个测试

    document.getElementById('btn').onclick = function () {
        var start = Date.now()
        console.log('启动定时器前...')
        setTimeout(function () {
          console.log('定时器执行了', Date.now()-start)
        }, 200)
        console.log('启动定时器后...')
      }

    结果是:

    定时器并不能保证真正定时执行
    一般会延迟一丁点(可以接受), 也有可能延迟很长时间(不能接受),像下面这种情况,加个for循环
    document.getElementById('btn').onclick = function () {
        var start = Date.now()
        console.log('启动定时器前...')
        setTimeout(function () {
          console.log('定时器执行了', Date.now()-start)
        }, 200)
        console.log('启动定时器后...')
    
        // 做一个长时间的工作
        for (var i = 0; i < 1000000000; i++) { //加了这个延时时间更长的原因是事件循环机制决定的,
    
        }
      }

     因为for循环是同步代码,执行完了才会执行 setTimeout函数。

    所以定时器是如何实现的就有了答案,事件循环机制

    还有,定时器的定时功能,并不代表执行时间,而是将回调函数从事件管理模块加入到任务队列的时间。这就涉及到了事件循环的知识。

     
    不积跬步无以至千里
  • 相关阅读:
    Java操作Excel之POI简单例子
    机器学习之KNN算法
    机器学习之sklearn数据集
    数据分析之matplotlib
    数据分析之pandas
    数据分析之numpy
    python模块contextlib
    前端jsonp解决跨域问题
    django media和static配置
    Django之数据库迁移和创建
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12024981.html
Copyright © 2011-2022 走看看