1:基本概念

栈(stack):用来保存简单的数据字段。

堆(heap):用来保存栈中简单的数据字段对指针的引用。

队列:是一种先进先出的线性数据结构。函数的调用的进栈和出栈的顺序,遵循 先进后出 的原则。

空间分配:堆:一般由程序员释放,如果程序员不释放就会在结束时由OS回收;

栈:一般由操作系统自动分配释放。

缓存方式:堆:存放在二级缓存中,生命周期一般是由虚拟机的垃圾回收算法决定的;

栈:存放在一级缓存中,被调用时处于存储空间,调用完立即释放。

操作数据:堆栈(先进后出),队列(先进先出)。

调用栈是一种栈结构,它用来存储计算机程序执行时候其活跃子程序的信息。它是一种LIFO的数据结构,将记录代码运行时的执行上下文。当遇到某个函数的调用语句时,它将会记录当前的执行上下文,将函数入栈,并为其创建一个新的执行上下文。(比如什么函数正在执行,什么函数正在被这个函数调用等等信息)。调用栈是解析器的一种机制。

javascript是一门单线程语言,主线程在同一时间只能处理一件事。那javascript是如何处理处理函数的调用关系的?答案是——调用栈。

2:Event Loop(事件循环)

JavaScript是一个单线程,它执行的所有代码都放在下面这个Call Stack里面,当Call Stack执行完毕之后,就会再右侧的队列里面找任务,如果有微任务,就会先执行微任务,再去执行宏任务。

事件循环:就是同步任务进入主线程,异步任务加入到任务队列中。等主线程的任务执行完就去执行任务队列中的任务,这个过程会不断重复。所有同步任务都在主线程上执行,形成一个执行栈。主线程之外, 存在一个任务队列(task queue), 异步任务有了运行结果会在任务队列之中放置一个任务。执行栈中的所有同步任务执行完毕后读取任务队列(先读取微任务、宏任务)不断重复上面的第三步。

js既然是单线程那么肯定是排队执行代码,怎么去排这个队就是Event Loop,虽然js是单线程但是浏览器不是单线程。

console.log('script start');

setTimeout(function() {

console.log('timeout1');

}, 10);

new Promise(resolve => {

console.log('promise1');

resolve();

setTimeout(() => console.log('timeout2'), 10);

}).then(function() {

console.log('then1')

})

console.log('script end');

//

* script start

* promise1

* script end

* then1

* timeout1

* timeout2

3:宏任务(Mask-task)setTimeout

setInterval

I/O

特点:由JavaScript线程外的宿主线程执行,比如,定时器触发线程setTimeout、setInterval,异步http请求线程。JavaScript线程不空闲宏任务永远没有执行机会。

for(let i=0; i<100000000; i++) {}

setTimeout(function() {

console.log('setTimeout1');

}, 1000);

setTimeout(function() {

console.log('setTimeout2');

}, 2000);

4:微任务(Mask-task)promise

特点:由JavaScript线程维护,它的执行时机是在主线程所有可执行代码执行完成后执行,浏览器渲染DOM前会全部执行。

js进栈出栈_JavaScript调用栈相关推荐

  1. js进栈出栈_[js]数组栈和队列操作

    写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一 ...

  2. js进栈出栈_链栈及基本操作(包含入栈和出栈)详解

    链栈,即用链表实现栈存储结构. 链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如图 1 所示: 图 1 链 ...

  3. JS引擎、运行时与调用栈概述

    概览 几乎所有人都已经听说了V8引擎的概念,大多数人都知道JavaScript是单线程运行的或者说是使用回调队列的. 接下来,我们将详细的讲述这些概念,解释JavaScript到底是怎样运行的.当知道 ...

  4. js进栈出栈_JavaScript js调用堆栈(一)

    当上述代码在浏览器中加载时,JavaScript 引擎会创建一个全局执行上下文并且将它推入当前的执行栈.当调用 first() 函数时,JavaScript 引擎为该函数创建了一个新的执行上下文并将其 ...

  5. 只调用一次_JavaScript运行机制 - 调用栈

    背景 如果你试图运行下面的代码: function func(){func() }func() 相信你会得到如下的结果 调用栈是用来管理函数调用关系的一种数据结构.让我们先来看看函数调用和栈结构. 函 ...

  6. 你不知道的JavaScript错误和调用栈常识

    大多数工程师可能并没留意过 JS 中错误对象.错误堆栈的细节,即使他们每天的日常工作会面临不少的报错,部分同学甚至在 console 的错误面前一脸懵逼,不知道从何开始排查,如果你对本文讲解的内容有系 ...

  7. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

  8. 出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。

    出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令.汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈. 2. ...

  9. 写一个 JS 调用栈可视化工具 hound-trace

    背景 最近在分析一些框架源码,在写笔记的时候,一些函数的调用栈希望用流程图的形式记录下来,打开 http://draw.io[1] 就是一顿操作,画了几个调用栈之后,感觉很麻烦.于是蹲在厕所里的我开始 ...

最新文章

  1. Numpy入门教程:练习作业01
  2. ASP.NET 例程完全代码版(3)——随意创建图形信息
  3. OpenCV实现基于傅里叶变换(FFT)的旋转文本校正(文字方向检测)
  4. 有时间担心中年危机,还不如用忧虑的时间来提升自己——再论程序员该如何避免所谓的中年危机...
  5. 为自己而活,这很难吗?
  6. python xml实例_python解析xml文档实例
  7. Java教程:Java字符串替换实例
  8. TurboMail邮件系统: IP进黑名单,仍可收发邮件
  9. Linux系统编程(18)——正则表达式实用举例
  10. Vue的babel-plugin-transform-remove-console依赖使用方法
  11. 这些练习并没有多少用,但舍不得就扔了,作个记录吧。
  12. proxy_redirect参数的作用
  13. qt 当前窗口句柄_QT获取Windows系统所有窗口句柄
  14. java使用bks双向认证_GitHub - wanglijun93/RxHttpUtils: Rxjava+Retrofit封装,便捷使用
  15. rust新版组队指令_腐蚀rust新版服务器指令大全 腐蚀指令一览
  16. Idea小技巧 之 折叠代码块
  17. va_list的用法
  18. C#小型书店管理系统
  19. 面试被diss,最后却拿到offer,去还是不去?
  20. 你还在为“收钱”发愁吗?BeeCloud打造支付平台

热门文章

  1. python嵌套html开发gui_如何在Python Tkinter GUI中嵌入Cartopy?
  2. Python学习笔记:用Python获取数据(本地数据与网络数据)
  3. Java Web学习笔记02:在Intellij里创建Web项目
  4. 6.边缘检测:梯度——边缘检测、导数与边缘、什么是梯度_2
  5. mysql-5.6.31.tar.gz_MySQL5.6.31源码安装
  6. 应用程序_构建应用程序12 条参考准则
  7. python支持complex吗_Python中complex函数有什么用?
  8. 2017.9.12 连通数 失败总结
  9. 2017.4.20 hanoi双塔问题 思考记录
  10. 【英语学习】【Daily English】U15 Culture L01 You'll be used to life here before long