• 起因

    • 周五改一个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的差异?)
              • http请求线程
                •   异步请求状态变更通知, 异步XHR
                • script element onload? (load一个js file之后执行)
              • UI渲染线程
                •   transitionend, animationend
          • 任务实体: 回调函数
        • UI渲染线程
        • 事件触发线程
      • 非常驻
        • http请求线程
  • 待探索的问题
    • setTimeout & 闭包
    • hit breakpoint 的线程处于什么状态?
    • JS Engine的任务过程能否被打断? (目前看来似乎不能被打断)

setTimeout(fn, 0)引发的JavaScipt线程的思考的更多相关文章

  1. 关于setTimeout(fn,0)

    JS是单线程引擎:它把任务放到队列中,不会同步去执行,必须在完成一个任务后才开始另外一个任务. 浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javasc ...

  2. JavaScript下的setTimeout(fn,0)意味着什么?

    近期在研究异步编程的我对于setTimeout之类的东西异常敏感.在SegmentFault上看到了一个问题<关于SetTimeout时间设为0时>:提问者读了一篇文章,原文解释setTi ...

  3. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...

  4. setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); 1 $.fn = { 2 ready: function(callback){ 3 ...

  5. setTimeout(fn,0)的作用分析

    众所周知,大家对setTimeout的用法肯定都比较熟悉了,但是不是还是会经常忘记使用呢,例如博主阿里面试时就忘了,见阿里前端面试. 今天跟大家讨论一下setTimeout(fn,0)的用法,相信很多 ...

  6. setTimeout(fn,0)

    我们都知道setTimeout是一个延迟执行的函数 console.log(); setTimeout(function(){console.log();},); console.log(); 会得到 ...

  7. Why is setTimeout(fn, 0) sometimes useful?

    http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful jquery validation s ...

  8. Javascript定时器(三)——setTimeout(func, 0)

    setTimeout(func, 0)可以使用在很多地方,拆分循环.模拟事件捕获.页面渲染等 一.setTimeout中的delay参数为0,并不是指马上执行 <script type=&quo ...

  9. setTimeout(f, 0)的应用&利用Deferred实现队列运行

    任务:从mongodb中导出csv数据,输出内容如下userid username usergender points points表: { "userid" : 1022, &q ...

随机推荐

  1. Python3.4+opencv3

    1.安装Python 3.4 for Windows 好的这好像没有什么可以说的 2.下载OpenCV 3和Numpy(OpenCV依赖Numpy库) 大家在这里就出了问题.如果使用直接使用pip i ...

  2. Quartz2D使用

    使用Quartz2D前  先导入QuartzCore.framework //划线 //1.获取图形上下文 CGContextRef ctx=UIGraphicsGetCurrentContext() ...

  3. Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)-b

    本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writ ...

  4. mongoose CastError: Cast to ObjectId failed for value

    restfull路由如下: router.get('/:id', controller.show); mongoes代码如下: exports.show = function(req, res) { ...

  5. 【Android】listview优化

    http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html http://blog.sina.com.cn/s/blog_5fc933 ...

  6. RUBY类特性

    学习教材 class Person def initialize(name,age=18) @name=name @age=age @motherland="China" end ...

  7. 【HDOJ】2150 Pipe

    计算几何的基础题目.是时候刷刷计算几何了. /* 2150 */ #include <cstdio> #include <cstring> #include <cstdl ...

  8. 维基百科上—数据仓库、数据挖掘、OLAP三者之间的区别

    数据仓库可以作为数据挖掘和OLAP等分析工具的资料来源,由于存放于数据仓库中的资料,必需经过筛选与转换,因此可以避免分析工具使用错误的资料,而得到不正确的分析结果. 数据挖掘和OLAP同为分析工具,其 ...

  9. HDU2050(分平面问题)

    分平面问题: 一.n条直线最多分平面问题. n条直线最多可以把平面分成多少个区域? 此类问题主要采用递归的思想.当有n-1条直线时,平面最多被分成了f(n-1)块区域.如果要使第n条直线分的区域最多, ...

  10. linux系统资源信息监控

    系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...