文章是本人大三期间的学习笔记,一些论断取自书籍和网上博客,碍于当时的技术水平有一些写得不够好的地方,可以在评论处理智讨论~
执行环境
(execution context,有时也被叫做执行上下文
)是 JavaScript 中最重要而且是最基本的一部分内容。在你搞清楚执行环境后,会对你弄清楚作用域链、变量提升、this这些核心概念起着决定性的作用。
希望你能在读完本文后,能够弄清楚解释器做了什么,为什么函数和变量能在声明前使用以及他们的值是何时被决定的。
执行环境(EC)
执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(
variable object
,一般简写为VO
),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。——来自红宝书对执行环境的定义
在 JavaScript 中,可执行的 JavaScript 代码分为三种
- Global Code(全局级别的代码)
- JavaScript 代码开始运行的默认环境,即全局的、不在任何函数里面的代码。
- Function Code(函数级别的代码)
- 代码进入一个JavaScript函数,运行函数体中的代码,即用户自定义函数中的函数体代码
- Eval Code(Eval的代码)
- 即 eval 函数中动态执行的代码
跳过 Eval Code,只说全局执行环境和函数执行环境。
全局执行环境
全局执行环境是最外围的一个执行环境。在 Web 浏览器中,全局执行环境被认为是 window 对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。代码