JS 引擎
我们知道不同的浏览器有不同的 JS 引擎。我们经常接触到的是 V8引擎(V8是谷歌发布的开源的 JavaScript 引擎,采用 C++ 编写,在谷歌的 Chrome 浏览器中被使用)
JS引擎执行过程大致分为下面三个阶段 :
一、语法分析
二、预编译阶段
三、执行阶段
注意:浏览器先按照 js 的顺序加载 <script> 标签分隔的代码块,js 代码块加载完毕后会执行上面三个阶段。接着会找下一个代码块,继续执行上面的三个阶段。这些脚本代码块都在同一个全局作用域中。
预编译阶段之 JS 运行环境
1、全局环境(JS 代码加载完毕后进入到预编译环境也就是全局环境)
2、函数环境(函数调用的时候进入到该函数环境,不同的函数,函数环境不同)
3、eval 环境
注意:每进入到一个不同的运行环境都会创建一个相应的执行上下文,在一段 js 代码中一般会创建多个执行上下文,js 引擎会以栈的数据结构对这些执行进行处理,形成函数调用栈(使用栈存取的方式管理运行环境)。栈底永远是全局执行上下文,栈顶则永远是当前执行上下文。
js 代码加载完毕后首先创建全局执行上下文,推入到 stack 中;调用函数的时候,进入该函数的运行环境,创建该函数的执行上下文,推入 stack 中;当该函数执行完毕后,栈顶该函数执行上下文首先出栈;全局上下文在浏览器或者该标签关闭时出栈。
注意:不同的运行环境执行都会进入到代码预编译和执行阶段,语法分析则在代码加载完时统一检查
执行上下文可以理解为当前执行环境&#x