看下面的代码,输出的结果是什么?并解释你的答案。

function printing() {

console.log(1);

    setTimeout(function() {console.log(2);    }, 1000);

    setTimeout(function() {console.log(3);    }, 0);

    console.log(4);}

printing();

答案:

1432

想知道为什么输出顺序是这样的,我们需要弄了解 setTimeout() 做了什么,以及浏览器的事件循环原理。

浏览器有一个事件循环用于检查事件队列,处理延迟的事件。UI事件(例如,点击,滚动等),Ajax回调,以及提供给 setTimeout() 和 setInterval() 的回调都会依次被事件循环处理。

因此,当调用 setTimeout() 函数时,即使延迟的时间被设置为0,提供的回调也会被排队。回调会乖乖地待在队列中,直到指定的时间用完后,它才开始执行动作。

因此,即使 setTimeout() 回调被延迟0毫秒,它仍然会被排队,并且直到函数中其他非延迟的语句被执行完了之后,才会执行。所以运行的结果是:1 4 3 2。

热门文章

原创教程

原创教程:

附加习题:

趣味职场

职场焦虑:

感到迷茫:

培训出身:

培训费用:

搞笑黑话:

职业自由:

职场形象:

经典面试题(12):关于事件循环,以下代码将输出什么?相关推荐

  1. 以题理解经典面试题——三六九等的事件环

    引言:## 因为最近在准备前端面试,作为很重要的事件环当然不得不回顾一下了,但是大牛们解释的实在是(字好多)根本看不进去,所以我觉得直接用题目理解. 在理解事件环之前,我们首先需要快速理解什么是堆和栈 ...

  2. js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)...

    javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...

  3. JS事件循环机制:同步与异步任务 之 宏任务 微任务

    JS事件循环机制:同步与异步任务 之 宏任务 微任务 阅读目录 javascript事件循环 setTimeout和setInterval中的执行时间 宏任务和微任务 javascript是单线程,一 ...

  4. js的事件循环机制,同步和异步,以及宏任务与微任务的执行顺序

    前置知识点(重要): 1.什么是事件循环:js是单线程语言,同个时间执行一件事(同步),但是他可以有一个异步队列,遇到异步操作(比如说ajax这种阻塞时间很久的事情)把它们先放入异步队列,并且继续往下 ...

  5. 浏览器与node事件循环

    我们都知道在浏览器中由于dom操作,js是单线程的. 为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得 ...

  6. [转] JavaScript:彻底理解同步、异步和事件循环(Event Loop)

    一. 单线程 我们常说"JavaScript是单线程的". 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个.不妨叫它主线程. 但是实际上还存在其他 ...

  7. Dart 异步编程之 Isolate 和事件循环

    尽管 Dart 是个单线程任务,但它提供 Future.Stream.后台任务以及其他特性用于编写现代异步程序以及响应式程序(Flutter).本文讲的是 Dart 后台任务的基础:Isolate 和 ...

  8. QT消息/事件循环机制与多线程的关系

    关于Qt子线程和消息循环 一.QT消息/事件循环机制 Qt作为一个可视化GUI界面操作系统,是基于事件驱动的,我们程序执行的顺序不再是线性,而是由一个个应用程序内部或外部的事件进行驱动,无事件时便阻塞 ...

  9. 对事件循环的一点理解

    最近工作需要学习了解webworker-threads以应对Javascript多线程处理CPU密集型的可能性:参考文档JavaScript多线程之二 Node.js中的Web Worker; 以下是 ...

最新文章

  1. 机器学习的数学基础 - 信息论
  2. ios查看帧率的软件_程序员必看!直播软件开发弱网下保障高清流畅推流的方法...
  3. 阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟
  4. 阿诺德图像加密c语言,基于Arnold置乱的数字图像加密算法(二)
  5. Nginx+PHP-FPM优化技巧总结(转发别人的,自己留着收藏个记录用)
  6. mysql 修改字段长度
  7. SQL:统计一个数据库中所有表记录的数量
  8. oracle32转64,Oracle10g下载地址--多平台下的32位和64位 (转)
  9. MFC之学习绘制矩形、画刷使用
  10. Windows蓝屏代码查询(Bug Check Code)
  11. 微信小程序提供 模板:template
  12. 安卓游戏广告加速插件_游戏加速器(强烈推荐!)[PC+安卓]
  13. MAC下微软Word修改样式为宋体却显示SimSun-Extb的解决办法
  14. 2022企业邮箱登陆入口介绍,企业邮箱电脑版登陆入口有哪些?手机如何登陆企业邮箱?
  15. 路由器ipv4和ipv6转发原理
  16. 再创学习生命力—破与立中成长
  17. 诛仙mysql数据库清空_数据库管理,启动命令,输入密码,用户名,虚拟机诛仙zx1324-1345一键镜像端、纯端kfvip - Welcome to XiongTianQi.CN...
  18. rk3128 debian9 如何配置recover键(长按开机进入loader模式)
  19. 转《论兔子怎么打败狼》
  20. NLP-基础任务-中文分词算法(1)-基于词典: 机械分词(词典字符串匹配):前向最大匹配、后向最大匹配、双向最大匹配【OOV:基于现有词典,不能进行新词发现处理】

热门文章

  1. PRD的编写竟然暗含这个思路
  2. 倒计时1天,BDTC2016最新完整版日程公布
  3. 作者:张丽丽(1984-),女,中国科学院计算机网络中心助理研究员
  4. 作者:胡清华(1976-),男,博士,天津大学计算机科学与技术学院教授。
  5. 移动应用开发——作业3
  6. 【计算机组成原理】指令执行过程
  7. 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
  8. HashMap暴力枚举(洛谷P1765题题解,Java语言描述)
  9. 感动到流泪!数据分析师的福音:跨视图粒度计算
  10. mahout 安装编译