调用栈
Q:是什么?
- A:解释器——一种机制(即:是一种拥有LIFO(后进先出)数据结构的栈)
Q:干什么?
- A:存储代码运行时创建执行上下文,用于追踪函数执行流,可以追踪哪个函数正在执行,执行的函数体中又调用了哪个函数。
Q:工作流程是怎样的?
-
A:>
1.push
- 每调用一个函数,解释器就会把该函数添加进调用栈并开始执行
2.判断并执行
- 判断:正在调用栈中执行的函数
- 执行:若还调用了其他函数==>那么新函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行。
3.清出
- 执行完毕后,将执行完毕的函数清出栈。
4.继续执行
- 继续执行当前执行环境下的剩余的代码。
Q:什么情况下会引发“堆栈溢出”错误?
- A:当分配的调用栈空间被占满时,如:没有终止的递归函数中容易出现。
Q:做了什么事?
- A:运行到一个函数,它就会将其放置到栈顶。当从这个函数返回的时候,就会将这个函数从栈顶弹出
Q:什么是调用帧?
- A:每一个进入调用栈的函数。
Q:何时会被创建?
- A:当JavaScript引擎第一次执行脚本的时候。