乐趣区

关于javascript:盘口搭建源码时飞鸟系统JavaScript是如何在微投后台工作的

搭建飞鸟零碎源码在运行 JavaScript 代码出租之前,有想过在后盾是怎么工作的吗?

【TG 电报 duotebb】版权所有,转载需表明出处!

单线程:这意味着一次只能产生一件事
非阻塞:假如您正在运行一个函数,该函数在该工作期间须要 30 秒,咱们正在期待 30 秒,而后能力产生其余任何事件!当然,这不会产生

这意味着它不期待异步代码的响应

为了更好地了解异步 JavaScript,让咱们看一下上面的代码:

console.log("Hello 1"); 

setTimeout(function() {console.log("Goodbye!");    

}, 3000);

console.log("Hello 2");

跟我一起想想最初的后果是什么..

代码后果

下面的代码产生了什么?

JavaScript 逐行运行,但它是非阻塞语言,因而它会运行筹备好的函数,并且函数须要稍后执行
所以对于异步 JavaScript,JavaScript 在执行函数时不会期待响应,因而它首先执行“Hello 1”而后是“Hello 2”并在 3 秒后执行“再见!”

JavaScript 执行

理论的 JavaScript 执行非常简单,但它与您首先须要理解的四个概念相关联。

调用堆栈
网络 API
回调队列
事件循环
调用栈:
JavaScript 只有一个调用栈,调用栈是
JS 引擎的一部分,当咱们运行代码时调用一个函数,它会被
增加到调用栈中。如果这个函数是异步的,比方
(timeout(setTimeOut),Ajax request, ..) 它会挪动到 web APIs。
这意味着一次只能执行一件事

Web APIs:
这是一个异步函数存在的中央,直到它
实现执行,实现后它简略地被增加
到回调队列中

回调队列:
当浏览器实现工夫(或
它为 JS 提供的任何其余 API)时,它不会
立刻将要执行的代码传输回 JavaScript。浏览器
实现后,会将代码存储在回调队列中。它是一个
蕴含一些函数或代码的队列,这些函数或代码将
在当前被回调。

事件循环:
有一个简略的工作,它查看主堆栈是否为空,
当它为空时,它查看回调队列。如果
队列中有待执行的代码,则将它们
一一转移到调用堆栈中。代码执行完后来到
栈,队列中的下一个上来,直到
队列为空

动图演示

下面的 gif 解释了这个想法
,咱们能够看到第一个函数被推送到调用堆栈
并立刻在控制台中执行 Hi,而后异步
函数 (setTimeOut) 从调用堆栈转移到 web apis 直到
它实现执行而后挪动到回调队列,当调用堆栈
为空时,事件循环将异步函数转移到堆栈
执行。

论断

咱们理解了谁在后盾执行同步和异步代码
,咱们晓得调用
堆栈、Web api、回调队列和事件循环的含意是什么。

退出移动版