美文网首页
什么是调用栈

什么是调用栈

作者: super_wei | 来源:发表于2019-07-12 17:06 被阅读0次

调用栈是解释器(就像浏览器中的javascript解释器)追踪函数执行流的一种机制。当执行环境中调用了多个函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。

我们在执行js代码的时候,当我们执行一个函数的时候,解析器就会把该函数给添加到调用栈中,调用栈开始执行;如果这个函数里面还有调用其他函数的话,调用的这个函数就会被添加到调用栈中去; 调用栈中的函数一执行结束就会从调用栈中清除出去,调用栈继续执行接下来的代码; 如果调用栈空间被占满了,就会引发“堆栈溢出”。

我们来看看一个例子:

function a() {
   // some code
    b()
    // some code
}
function b(){
  console.log('hello')
}
a()

以上的代码块执行顺序是这样的:
1、执行到函数a的时候,吧a()添加到调用栈列表中并且执行
2、执行a函数中调用b函数之前的代码
3、执行到b函数的时候,吧b函数添加到调用栈,并且执行
4、b函数执行结束,从代码栈中清出,并执行a函数之后的代码
5、a执行完毕,从调用栈清出
6、继续执行接下来的代码。

一开始,我们得到一个空空如也的调用栈。随后,每当有函数被调用都会自动地添加进调用栈,执行完函数体中的代码后,调用栈又会自动地移除这个函数。最后,我们又得到了一个空空如也的调用栈。


了解更多:

调用栈 - 术语表 | MDN

相关文章

  • 不积跬步之漫谈JavaScript的递归函数之尾递归优化

    要知道什么是尾调用,我们就要先从调用栈开始说起。 什么是调用栈 ? 调用栈((Call Stack)是一个基本的计...

  • 什么是调用栈

    调用栈是解释器(就像浏览器中的javascript解释器)追踪函数执行流的一种机制。当执行环境中调用了多个函数时,...

  • JavaScript调用栈、尾递归和手动优化

    调用栈(Call Stack) 调用栈(Call Stack)是一个基本的计算机概念,这里引入一个概念:栈帧。 栈...

  • JVM学习笔记之栈区

    JVM学习笔记之栈区 本文主要内容: 栈是什么?栈帧又是什么?在JVM中,main方法调用say方法后,是怎么运行...

  • iOS获取任意线程调用栈

    iOS获取任意线程调用栈iOS获取任意线程调用栈

  • 4 : 栈

    1:什么是栈 2:栈的存在意义 3:如何实现一个“栈”? 4:复杂度 5:栈在函数调用中的应用 6:栈在表达式求值...

  • 11-27函数

    函数 函数的重点是识别调用约定、参数类型和返回值类型 调用约定: cdecl调用方平栈 stdcall被调用方平栈...

  • 记录不使用递归的斐波那契数列

    用普通的递归法会爆栈的原因是栈内存一般比较小, 而使用递归通常会向调用栈内加入大量的待调用函数, 超过调用栈的大小...

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • iOS开发--探究iOS线程调用栈及符号化

    探究iOS线程调用栈及符号化 概念 调用栈,也称为执行栈、控制栈、运行时栈与机器栈,是计算机科学中存储运行子程序的...

网友评论

      本文标题:什么是调用栈

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