并发模型与事件循环

JavaScript 有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事情以及执行队列中的子任务。


函数调用形成了一个由若干帧组成的栈。

function foo(b) {
    let a = 10;
    return a + b + 11;
}

function bar(x) {
    let y = 3;
    return foo(x * y);
}

console.log(bar(7));  // 返回42

当调用 bar 时,第一个帧被创建并压入栈中,帧中包含了 bar 的参数和局部变量。
当 bar 调用 foo 时,第二个帧被创建并压入栈中,放在第一个帧之上,帧中包含 foo 的参数和局部变量。
当 foo 执行完毕然后返回时,第二个帧就被弹出栈(剩下 bar 函数的调用帧)。当 bar 也执行完毕然后返回时,第一个帧也被弹出,栈就被清空了。

 

对象被分配在队中,堆是一个用来表示一大块(通常是非结构化的)内存区域的计算机术语。

 

队列

一个 JavaScript 运行时包含了一个待处理消息的消息列表。每一个消息都关联着一个用以处理这个消息的回调。

在事件循环期间的某个时刻,运行时会从最先进入队列的消息开始处理队列中的消息。被处理的消息会被移出队列,并作为输入参数来调用与之关联的函数,正如前面提到的,调用一个函数总是会为其创造一个新的栈帧。

 

感谢分享:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop

https://blog.csdn.net/anleng6817/article/details/101127308

posted @ 2021-09-11 12:10  し7709  阅读(34)  评论(0编辑  收藏  举报