先以一道面试题做引子: 写出这段程序的输出内容: 如果你看了这道题不知道怎么下手,或者发现结果和自己的答案大相径庭,请继续往下看 1. javascript事件循环首先,你要知道javascript是单线程语言。js任务需要排队顺序执行,如果一个任务耗时过长,后边一个任务 ...
首先提一个小问题:运行下面这段 JS 代码后控制台的输出是什么 可以先尝试自己分析一下结果,然后再看答案: 怎么样,你猜对了吗 如果对这个输出结果感到很迷惑,这篇文章或许可以帮到你。 PS:文中按照标准分析理论结果,但实际上各个浏览器对任务队列的支持情况很混乱,所以如果你在浏览器执行代码后发现结果不同也不必纠结 总体来说 Chrome 的支持比较好。 如果对 Promise 的用法还不熟悉,可以看 ...
2021-04-03 18:09 0 344 推荐指数:
先以一道面试题做引子: 写出这段程序的输出内容: 如果你看了这道题不知道怎么下手,或者发现结果和自己的答案大相径庭,请继续往下看 1. javascript事件循环首先,你要知道javascript是单线程语言。js任务需要排队顺序执行,如果一个任务耗时过长,后边一个任务 ...
1、执行机制 JS 是单线程的,处理 JS 任务(程序)只能一个一个顺序执行,所以 JS 中就把任务分为了同步任务和异步任务。同步的进入主线程先执行,异步的进入Event Table并注册函数,当指定的事情完成时,Event Table会将这个函数移入事件队列Event Queue,等待主线 ...
JS 分为同步任务和异步任务 同步任务在主线程上执行 异步任务放在主线程之外的一个任务队列 主线程执行完毕后,读取任务队列的内容 宏任务(macro)task:当前主线程上执行的就是一个宏任务。例: script 的代码、setTimeout、setInterval ...
javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步。 javascript事件循环 事件循环中的同步任务,异步任务: 同步和异步任务在不同的执行"场所",同步的进入主线程,异步的进入Event ...
1.概念:宏任务(macrotask )和微任务(microtask ) 表示异步任务的两种分类。常见宏任务:I/O 、setTimeout、setInterval;微任务:Promise.then catch finally、process.nextTick 在挂起任务时,JS 引擎会将 所有 ...
栈,是指只有在一端进行存取的表结构。可以看做一个打开的箱子,永远只能对最上面的东西进行操作。也就是先进(栈底)后出(必须把上面的全都拿走),后进(栈顶)先出的顺序。 队列,是指排队过安检,先进先出。 在JS的单线程中,任务队列可以有多个。这些队列都是依靠函数调用栈来循环执行,这也就是我们常说 ...
回调,是非常基本的概念,尤其在现今NodeJS诞生与蓬勃发展中变得更加被人们重视。很多朋友学NodeJS,学很久一直摸不着门道,觉得最后在用Express写Web程序,有这样的感觉只能说明没有学懂NodeJS,本质上说不理解回调,就不理解NodeJS。 NodeJS有三大核心 ...
一:调用栈是个什么鬼东西,它具有栈的属性--后进先出 先看一段简单的JS代码: const second = function(){ console.log('hello there'); } const first = function() { console.log('hi,first ...