setTimeout(fn, 0)引发的JavaScipt线程的思考
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的差异?)
- 异步请求状态变更通知
- 来自JS Engine当前执行的代码块, 例:
- 任务实体: 回调函数
- UI渲染线程
- 事件触发线程
- JS Engine线程
- 非常驻
- http请求线程
- 常驻
- 浏览器内核的多线程机制
- 待探索的问题
- setTimeout & 闭包
- hit breakpoint 的线程处于什么状态?
- JS Engine的任务过程能否被打断? (目前看来似乎不能被打断)
以上是关于setTimeout(fn, 0)引发的JavaScipt线程的思考的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript下的setTimeout(fn,0)的作用,涨知识了