浏览器工作原理——调用栈

2021年10月25日

总结

了解调用栈可以更好地理解 JavaScript 代码是按照什么顺序被执行的。调用栈是用来 JavaScript 解释器用来追踪函数执行流的一种机制,通过这种机制,可以追踪到哪个函数正在执行(栈顶),执行的函数体中又调用了哪个函数(创建新的栈帧并压入调用栈),函数在调用栈中表示为执行上下文。

  • 每调用一个函数,解释器就会把该函数(执行上下文)添加进调用栈并开始执行。
  • 正在调用栈中执行的函数还调用了其它函数,那么新函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行。
  • 当前函数执行完毕后,解释器将其清出调用栈,继续执行当前执行环境下的剩余的代码。
  • 当分配的调用栈空间被占满时,会引发“堆栈溢出”错误。

执行上下文

有关正在运行的函数的执行过程的相关信息被保存在它的执行上下文中。执行上下文 是一个内部数据结构,它包含有关函数执行时的详细细节:当前控制流所在的位置,当前的变量,this 的值(此处我们不使用它),以及其它的一些内部细节。

一个函数调用仅具有一个与其相关联的执行上下文。

当一个函数进行嵌套调用时,将发生以下的事儿:

  • 当前函数被暂停;
  • 与它关联的执行上下文被一个叫做 执行上下文堆栈 的特殊数据结构保存;
  • 执行嵌套调用;
  • 嵌套调用结束后,从堆栈中恢复之前的执行上下文,并从停止的位置恢复外部函数。

相关阅读


© 2022, 分享知识和生活,记录成长与感动。