对于Javascript的单线程实现一直一知半解的。开始以为很难,但是仔细看一下感觉还好。

首先明白一点,js是单线程的,也就是说js只能在同一时刻处理一段代码。但是js运行的环境浏览器却是可以多线程的,它具有多个线程,js代码处理引擎线程、事件触发线程、http请求线程、计时器触发线程。多者辅助,实现了js的异步处理。

准确的来说。这个实际上就是说,js引擎线程就是主程序。一旦碰上相应的例如计时器产生了,就先将这个定时器内部的代码先挂起,等到需要执行的时间到了,让计时器的线程提醒js该执行刚刚的代码了。js这样就达到了伪异步。

setTimeout(function(){console.log('settime');
}, 0);
console.log('now');

例如以上输出的就实现输出now,然后输出settime。

这个是让我觉得最清楚的一个图了。蓝色整体代表着js引擎中要执行的代码部分。蓝色javascript的块是现在要执行的代码部分当我们想要出发interval或者点击事件等得时候事情都需要往后排。直到当前执行结束之后再进行处理后面的得代码。但是settimeout和setinterval还有一些区别,settimeout如果产生了,就将事情放到等待处理的序列中,但是settimeout每次毁掉触发的时候只会保留第一次需要执行的代码部分,如果第二次需要触发的时候,其中js引擎有使用的时候,就会将这一次回调触发抛弃。直到js部分闲下来了,就会立刻执行。

详细标准:

http://www.cnblogs.com/sprying/archive/2013/05/26/3100639.html

转载于:https://www.cnblogs.com/acefeng/p/8635518.html

Javascript单线程实现相关推荐

  1. 前端开发技术-剖析JavaScript单线程

    JavaScript单线程和多线程是很多小白同学入门的时候问到最多的问题,虽然官方给出过解释但对于新手来说并不友好,今天小千就来给大家介绍一下JavaScript的单线程. 一. 浏览器的进程和线程 ...

  2. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  3. JavaScript单线程运行机制与并发模型

    一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一时间只能做一件事.具体地,一个window对应一个JavaScript线程. JavaScript ...

  4. JavaScript单线程异步的背后——事件循环机制

    感觉这篇文章拖了很久,好尴尬的拖延症 正文从这里开始--- 对JavaScript有个很模糊的印象,它是单线程异步的.本文主要来说说JavaScript到底是怎么运行的.但在这之前,让我们先理一下这些 ...

  5. JavaScript单线程 setTimeout定时器

    理解JavaScript的单线程的理念对于JavaScript学习,以及掌握其中的一些设计机制非常重要,比如回调.定时器.对于后续学习NodeJS也有很大的帮助. 通过先demo,后总结的形式,使得J ...

  6. JavaScript单线程

    JavaScript的单线程源于其需要与用户进行交互,通过响应用户的操作作出相应的反应.如果非单线程,那么当用户执行两个相互矛盾的操作时,都需要得到响应,那么究竟是哪一个先哪一个后呢?因此,为了避免这 ...

  7. 深入分析 Javascript 单线程

    面试的时候发现99%的童鞋不理解为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的?还有non-blocking IO, event l ...

  8. 从Javascript单线程谈Event Loop

    假如面试回答js的运行机制时,你可能说出这么一段话:"Javascript的事件分同步任务和异步任务,遇到同步任务就放在执行栈中执行,而碰到异步任务就放到任务队列之中,等到执行栈执行完毕之后 ...

  9. 前端小知识点(3):JavaScript 单线程

    目录 一.为什么 JavaScript 是单线程? 二.JavaScript是单线程,怎样执行异步的代码? 三.事件循环机制 四.代码1 五.结果1 六.代码2 七.结果2 一.为什么 JavaScr ...

最新文章

  1. 大学老师称古风歌词“狗屁不通”,遭粉丝围攻:回家葬母吧
  2. 面试题整理5 顺时针打印矩阵
  3. VMWare下的DOS与宿主机的文件共享
  4. Libra教程之:运行自定义move modules
  5. 如何区分网线是几类的_小移课堂 | 网线这样选,网速才能嗖嗖的!
  6. 【三维激光扫描】实验01:环境搭建CAD2014+StonexSiScan软件安装
  7. 《C和指针》——带副作用的宏参数
  8. 哪款浏览器速度最快_全球知名度非常高的火狐浏览器,它好在哪呢?
  9. 通过U盘刻录镜像安装windows系统
  10. RTMP直播推流Video(视频)
  11. “限时秒杀”活动分析报告
  12. 关于使用Cobalt Strike制作宏病毒
  13. mysql 小数点多余0_mysql中如何去除小数点后面多余的0
  14. rrweb学习案例(网页录制,回放)-demo
  15. websocket协议和服务实现
  16. 学习python的摸鱼日常
  17. NDM(Neat Download Manager)删除所有下载记录
  18. 陶行知:学生自治问题之研究
  19. 《Python How to Program》读书笔记
  20. 白帽,黑帽,灰帽,绿帽!一文了解黑客的所有信息

热门文章

  1. WebService – 3.后台调用WebService,根级别上的数据无效
  2. dorado listener属性
  3. .net环境故障处理
  4. Android内存泄漏就这样产生了
  5. 导入数据tf-data
  6. [JAVA]寻找满足和的最短子序列(Minimum Size Subarray Sum)
  7. 域内主机间之共享文件(夹)访问
  8. spring in action 4 线路图
  9. 升级 Java 编程规范的6个约定
  10. JUNOS下的浮动路由