美文网首页JavaScript 进阶营Web 前端开发
javascript运行时中的堆栈和队列

javascript运行时中的堆栈和队列

作者: 3624d4286e87 | 来源:发表于2018-03-02 23:09 被阅读29次

下面是一个理论上的模型,js引擎着重实现和优化了描述的这几个语义

可视化描述

test.jpg

栈(stack)

var a = 10;
function bar(x) {
  var b = 5;
  fn(x + b);
}
function fn(y) {
  var c = 5;
}
bar(10);

js会以一种执行栈的方式去执行代码,以一种入栈和出栈的方式,后进先出的完成代码执行,用下图表示如下(上下文描述可以忽略,有兴趣的可以参考这篇文章,此文不作讲解):

232125295149083.png

堆(heap)

简单点说,就是一块内存区域,用来存储声明的变量、对象,相比栈而言,它是无结构的,而栈(stack)是有结构的。

队列(queue)

一个js运行时包含了一个待处理的消息队列,每一个消息都与一个函数相关联。当栈(stack)拥有足够内存时,从队列中取出一个消息进行处理。这个处理过程包含了调用与这个消息相关联的函数(以及因而创建了一个初始堆栈帧)。当栈(stack)再次为空的时候,也就意味着消息处理结束。

在处理消息队列的时候,会涉及到事件循环(Event Loop),在游览器中由事件触发线程进行,用下图很好的描述了整体结构:

bg2014100802.png

对事件循环的原理和js异步和线程感兴趣的,可以读读这篇文章

参考链接

相关文章

  • javascript运行时中的堆栈和队列

    下面是一个理论上的模型,js引擎着重实现和优化了描述的这几个语义 可视化描述 栈(stack) js会以一种执行栈...

  • 在Python中实现两个堆栈的队列

    在Python中实现两个堆栈的队列。数据结构了解堆栈和队列。然后用两个堆栈实现一个队列。堆栈和队列都是列表。但它们...

  • Javascript事件循环和调用堆栈

    调用堆栈 众所周知JavaScript是单线程编程语言,它只有一个单一的调用堆栈,当调用堆栈由函数在运行,它就不能...

  • 3-15 算法类

    排序 队列 链表堆栈 是一定要准备的,JS的数组本身就具备堆栈和队列的特性.pop push shift unsh...

  • JavaScript是如何工作的:引擎,运行时和调用堆栈的概述!

    摘要: 理解JS执行原理。 原文:JavaScript是如何工作的:引擎,运行时和调用堆栈的概述! 作者:前端小智...

  • 使用两个队列模拟堆栈结构

    两个队列模拟一个堆栈,队列是先进先出,而堆栈是先进后出。模拟如下队列a和b(1)入栈:a队列为空,b为空。例:则将...

  • 学习Javascript数据结构与算法 — 队列

    代码运行环境:任何可以运行Javascript的环境即可。 第一章:队列 1. 什么是队列? 特性:先进去的元素,...

  • 模拟堆栈和队列

    队列:先进先出 First in First out FIFO 如同一个水管。堆栈:先进后出 如同一个杯子。 练习...

  • 四、堆栈和队列

    堆栈的概念及操作 堆栈的定义 堆栈简称为栈,它是一种只允许在表的一端进行插入和删除操作的线性表。允许操作的 一堆称...

  • 队列的顺序存储实现

    队列是和堆栈一样是一种特殊的线性表,和堆栈不一样的地方是是,堆栈是以后进先出的的数据组织方式,而队列则正好相反先进...

网友评论

    本文标题:javascript运行时中的堆栈和队列

    本文链接:https://www.haomeiwen.com/subject/nqkaxftx.html