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

  • 起因

    • 周五改一个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的任务过程能否被打断? (目前看来似乎不能被打断)
时间: 2024-10-10 05:45:54

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

【编辑推荐】JavaScript下的setTimeout(fn,0)意味着什么?

近期在研究异步编程的我对于setTimeout之类的东西异常敏感.在SegmentFault上看到了一个问题<关于SetTimeout时间设为0时>:提问者读了一篇文章,原文解释setTimeout延迟时间为0时会发生的事情,提问者提出了几个文章中的几个疑点.读了那篇文章之后发现原文的作者对于setTimeout的理解和自己的认知有点出入,于是编写了相关测试的代码以求答案.最终编写了这篇文章. 本文内容如下: 起因 单线程的JavaScript setTimeout背后意味着什么 参考和引用

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

原文:JavaScript下的setTimeout(fn,0)意味着什么? 近期在研究异步编程的我对于setTimeout之类的东西异常敏感.在SegmentFault上看到了一个问题<关于SetTimeout时间设为0时>:提问者读了一篇文章,原文解释setTimeout延迟时间为0时会发生的事情,提问者提出了几个文章中的几个疑点.读了那篇文章之后发现原文的作者对于setTimeout的理解和自己的认知有点出入,于是编写了相关测试的代码以求答案.最终编写了这篇文章. 本文内容如下: 起因 单

JavaScript下的setTimeout(fn,0)的作用,涨知识了

在工作学习中,我看到团队中的有些大神的代码中不时的出现setTimeout(fn,0):这样的写法,很好奇,这样写的作用是什么,在网上,经过一位网友无私耐心地阐述,我才对js单线程的机制有了更深的认识,此处我引上链接,与君共勉! http://www.cnblogs.com/silin6/p/4333999.html

nextTick setImmediate setTimeout(fn, 0)

setImmediate()属于check观察者,其设置的回调函数,会插入到下次事件循环的末尾. process.nextTick()设置的回调函数,会在代码运行完成后立即执行,会在下次事件循环之前被调用,原文是 "the callback will fire as soon as the code runs to completion, but before going back to the event loop." process.nextTick()所设置的回调函数会存放到数组

setTimeout(fn,0)

我们都知道setTimeout是一个延迟执行的函数 console.log(1); setTimeout(function(){console.log(2);},1000); console.log(3); 会得到1,3,2 但是 setTimeout(function(){console.log(1);}, 0); console.log(2); 你知道这段代码会执行什么样的效果吗 正确答案是2,1 一开始我也很疑惑, setTimeout(function(){console.log(1);

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

setTimeout(func, 0)可以使用在很多地方,拆分循环.模拟事件捕获.页面渲染等 一.setTimeout中的delay参数为0,并不是指马上执行 <script type="text/javascript"> function delay1() { console.log('delay1'); } function delay2() { console.log('delay2'); } function delay3() { console.log('dela

js中 setTimeout延时0毫秒的作用

经常看到setTimeout延时0ms的javascript代码,感到很迷惑,难道延时0ms和不延时不是一个道理吗?后来通过查资料以及实验得出以下两个作用,可能还有作用我还不知道,希望得知的朋友在后面评论上不吝指出.1.实现javascript的异步:正常情况下javascript都是按照顺序执行的.但是我们可能让该语句后面的语句执行完再执行本身,这时就可以用到setTimeout延时0ms来实现了.如: alert(1); setTimeout("alert(2)", 0); ale

Navicat连接mysql出现2003——can&#39;t connect to mysql server on localhost(10061)引发的关于人生的思考)

(0)目录 走,是一辈子,不走,也是一辈子(程序猿之路) Navicat连接mysql出现2003--can't connect to mysql server on localhost(10061) 一:起因 (0)最近由于病了一场,闲暇时间(即生病期间)一直思考如下问题: 思考一:如何做一名合格的程序猿,怎么才能成为一名名副其实的程序猿? 思考二:还有就是到底,值不值得熬夜加班去搞研发(或转型或做相对轻松的其它IT岗位~~~对于这个问题,我一时无法给出答案,希望各位帮我分析一下,不胜感激!!

一个贴子引发的对回调的思考

一个贴子引发的对回调的思考 网上看到一个贴子:http://topic.csdn.net/u/20080728/20/d60f719a-c103-44b8-8d0c-bc1c818b768a.html 觉得蛮有意思,在学习的工程中又引申出不少东西,真有趣!! 定义在类中方法之外的内部类分为实例内部类和静态内部类. 实例内部类自动持有外部类的实例的引用,即可以访问外部类的所有变量: 静态内部类可以直接访问外部类的静态成员: 定义在方法中的内部类叫局部内部类,该类只能访问被final修饰的局部变量和