Skip to main content

调用栈

Q:是什么?

  • A:解释器——一种机制(即:是一种拥有LIFO(后进先出)数据结构的栈)

Q:干什么?

  • A:存储代码运行时创建执行上下文,用于追踪函数执行流,可以追踪哪个函数正在执行,执行的函数体中又调用了哪个函数。

Q:工作流程是怎样的?

  • A:>

    1.push

    • 每调用一个函数,解释器就会把该函数添加进调用栈并开始执行

    2.判断并执行

    • 判断:正在调用栈中执行的函数
    • 执行:若还调用了其他函数==>那么新函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行。

    3.清出

    • 执行完毕后,将执行完毕的函数清出栈。

    4.继续执行

    • 继续执行当前执行环境下的剩余的代码。

Q:什么情况下会引发“堆栈溢出”错误?

  • A:当分配的调用栈空间被占满时,如:没有终止的递归函数中容易出现。

Q:做了什么事?

  • A:运行到一个函数,它就会将其放置到栈顶。当从这个函数返回的时候,就会将这个函数从栈顶弹出

Q:什么是调用帧?

  • A:每一个进入调用栈的函数。

Q:何时会被创建?

  • A:当JavaScript引擎第一次执行脚本的时候。