经典面试题(12):关于事件循环,以下代码将输出什么?
看下面的代码,输出的结果是什么?并解释你的答案。
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):关于事件循环,以下代码将输出什么?相关推荐
- 以题理解经典面试题——三六九等的事件环
引言:## 因为最近在准备前端面试,作为很重要的事件环当然不得不回顾一下了,但是大牛们解释的实在是(字好多)根本看不进去,所以我觉得直接用题目理解. 在理解事件环之前,我们首先需要快速理解什么是堆和栈 ...
- js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)...
javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...
- JS事件循环机制:同步与异步任务 之 宏任务 微任务
JS事件循环机制:同步与异步任务 之 宏任务 微任务 阅读目录 javascript事件循环 setTimeout和setInterval中的执行时间 宏任务和微任务 javascript是单线程,一 ...
- js的事件循环机制,同步和异步,以及宏任务与微任务的执行顺序
前置知识点(重要): 1.什么是事件循环:js是单线程语言,同个时间执行一件事(同步),但是他可以有一个异步队列,遇到异步操作(比如说ajax这种阻塞时间很久的事情)把它们先放入异步队列,并且继续往下 ...
- 浏览器与node事件循环
我们都知道在浏览器中由于dom操作,js是单线程的. 为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得 ...
- [转] JavaScript:彻底理解同步、异步和事件循环(Event Loop)
一. 单线程 我们常说"JavaScript是单线程的". 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个.不妨叫它主线程. 但是实际上还存在其他 ...
- Dart 异步编程之 Isolate 和事件循环
尽管 Dart 是个单线程任务,但它提供 Future.Stream.后台任务以及其他特性用于编写现代异步程序以及响应式程序(Flutter).本文讲的是 Dart 后台任务的基础:Isolate 和 ...
- QT消息/事件循环机制与多线程的关系
关于Qt子线程和消息循环 一.QT消息/事件循环机制 Qt作为一个可视化GUI界面操作系统,是基于事件驱动的,我们程序执行的顺序不再是线性,而是由一个个应用程序内部或外部的事件进行驱动,无事件时便阻塞 ...
- 对事件循环的一点理解
最近工作需要学习了解webworker-threads以应对Javascript多线程处理CPU密集型的可能性:参考文档JavaScript多线程之二 Node.js中的Web Worker; 以下是 ...
最新文章
- 机器学习的数学基础 - 信息论
- ios查看帧率的软件_程序员必看!直播软件开发弱网下保障高清流畅推流的方法...
- 阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟
- 阿诺德图像加密c语言,基于Arnold置乱的数字图像加密算法(二)
- Nginx+PHP-FPM优化技巧总结(转发别人的,自己留着收藏个记录用)
- mysql 修改字段长度
- SQL:统计一个数据库中所有表记录的数量
- oracle32转64,Oracle10g下载地址--多平台下的32位和64位 (转)
- MFC之学习绘制矩形、画刷使用
- Windows蓝屏代码查询(Bug Check Code)
- 微信小程序提供 模板:template
- 安卓游戏广告加速插件_游戏加速器(强烈推荐!)[PC+安卓]
- MAC下微软Word修改样式为宋体却显示SimSun-Extb的解决办法
- 2022企业邮箱登陆入口介绍,企业邮箱电脑版登陆入口有哪些?手机如何登陆企业邮箱?
- 路由器ipv4和ipv6转发原理
- 再创学习生命力—破与立中成长
- 诛仙mysql数据库清空_数据库管理,启动命令,输入密码,用户名,虚拟机诛仙zx1324-1345一键镜像端、纯端kfvip - Welcome to XiongTianQi.CN...
- rk3128 debian9 如何配置recover键(长按开机进入loader模式)
- 转《论兔子怎么打败狼》
- NLP-基础任务-中文分词算法(1)-基于词典: 机械分词(词典字符串匹配):前向最大匹配、后向最大匹配、双向最大匹配【OOV:基于现有词典,不能进行新词发现处理】