今天我们来继续聊一聊JavaScript的底层内容,就是它的运行期环境。
运行期环境 ( 也称"执行上下文" ) 可以说是 JavaScript 最重要的一个概念。那么运行环境到底是什么呢?一句话就可以概括:代码 ( 包括函数 ) 运行时所需要的所有信息就是运行期环境。由于 ES 历经多个版本,所以运行环境的标准也一直在变,而且不同的书籍对于JavaScript运行期环境的阐述也是不一样的,例如,在《JavaScript权威指南》中,它由“JavaScript内核(Core)”和“客户端JavaScript(Client)”两部分组成;而在《JavaScript高级程序设计》中,该书把它记录为由“核心(ECMAScript)”,“文档对象模型(DOM)”,“浏览器对象模型(BOM)”三个部分组成。
并且不同的ES版本对运行期的执行标准也有非常大的出入,例如:
ES3 标准中的运行环境
scope:作用域,如果有作用域嵌套的情况就称作"作用域链"。
variable object:变量对象,用于存储标识符的特殊对象。
this value:this 值。
ES5 标准中的运行环境
variable environment:变量环境,当声明变量时使用。
lexical environment:词法环境,当获取标识符值时使用。
this value:this 值。
ES6 标准中的运行环境
variable environment:变量环境,当声明变量时使用。
lexical environment:词法环境,当获取标识符值或者 this 值时使用。
不过呢,笔者看来,从浏览器相关的内容都应该属于“应用环境”:属于宿主环境或者属于用户编程环境。而运行期环境是由宿主通过脚本引擎(JavaScript Engines)创建的,因为一个运行期环境应该包含以下的特性:
(1) 宿主环境:浏览器或者 Node 环境。
(2) 引擎:从头到尾负责整个 JavaScript 代码的编译及执行过程。
(3) 执行栈:一种遵循" 后进先出 "原则的有序数据集合,可以简单理解为使用 push() 和 pop() 操作数组。
(4) 一些其他的规范。
不过呢,这里面还是有个执行栈的概念,所谓执行栈呢,当打开网页或浏览器时,宿主环境会将代码传递给引擎去执行,引擎首先会创建一个全局执行环境。全局环境中的代码自上而下有顺序的执行,当遇到一个函数时,函数的环境被创建,函数中的代码开始执行;而在函数执行之后,控制权又返还给之前的环境。ES 这种类似于" 栈 "的控制机制,称为执行栈。
综合以上的内容,JavaScript 的运行时流程图如下:
本文原创,未经作者允许不可转载!
更多内容,欢迎关注作者微信公众号:李游Leo老师前端讲堂!
暂无评论
违反法律法规
侵犯个人权益
有害网站环境