在执行前就进行编译并创建执行上下文的三种情况
- 当JS执行全局代码得时候,会编译全局代码并创建全局执行上下文,而且在整个页面的生存周期内,全局执行上下文只有一份。
- 当调用一个函数的时候,函数体内的代码会被编译,并创建函数执行上下文,在函数执行结束后,会被销毁。
- 当使用eval函数的时候,eval的代码也会编译,并创建执行上下文。
调用栈(用来管理函数调用关系的一种数据结构)
- 什么是函数调用?
- 本质是,就是运行一个函数,在执行函数前,JS引擎会为代码创建全局执行上下文,包含了声明的函数和变量。
- 什么是JS的调用栈
- JS引擎用来管理执行上下文的栈称为执行上下文栈,又称调用栈。
- 调用栈也是JS引擎追踪函数执行的一个机制。
- 栈溢出,当入栈的执行上下文超过一定数目,JS引擎就会报错,这个错误就叫做栈溢出(函数递归调用,且无终止条件的时候)。