码迷,mamicode.com
首页 > 编程语言 > 详细

setTimeout(fn, 0)引发的JavaScipt线程的思考

时间:2016-01-31 17:14:45      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

  • 起因
    • 周五改一个checkbox的display属性被错误地设置为none的bug. 经debug发现, 有两个地方修改了display属性: 1) checkbox的controller; 2) checkbox的parent(container). 前者先将display属性更新为block(正确), 后者再次更新为none(错误). 普通的思路是, 修改checkbox的container的代码, 使其能正确更新display值. 但另有一种更巧妙的方法, 就是修改checkbox的controller的代码, 将更新display相关的函数fn放在setTimeout中 -- setTimeout(fn, 0). 
  • 参考
  • 总结
    • 浏览器内核的多线程机制
      • 常驻
        • JS Engine线程
          • JS Engine为事件驱动型
          • 事件来源
            • 来自JS Engine当前执行的代码块, 例:
              • setTimeout添加一个任务
            • 来自浏览器内核其他线程, 例:
              • 界面元素鼠标点击事件
              • 定时触发器时间到达通知(与setTimeout的差异?)
              • 异步请求状态变更通知
          • 任务实体: 回调函数
        • UI渲染线程
        • 事件触发线程
      • 非常驻
        • http请求线程
  • 待探索的问题
    • setTimeout & 闭包
    • hit breakpoint 的线程处于什么状态?
    • JS Engine的任务过程能否被打断? (目前看来似乎不能被打断)

setTimeout(fn, 0)引发的JavaScipt线程的思考

标签:

原文地址:http://www.cnblogs.com/gentlemint/p/5173506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!