通常将JavaScript归类为“动态”或“解释执行”语言,JavaScript引擎进行编译的步骤和传统的编译语言非常相似,在某些环节可能比预想的要复杂些。
在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为“编译”
- 分词 / 词法分析(Tokenizing / Lexing)
- 解析 / 语法分析(Parsing)
- 代码生成(AST)
JS执行环境及作用域(execution context And Scope)
执行环境**
每个执行环境都有一个与之关联的变量对象(variable object)
作用域(Scope)
什么是作用域?
所有的Window对象的属性拥有全局作用域
全局作用域和函数作用域
JavaScript中作用域链和执行上下文有什么区别?
执行上下文在运行时确定,随时可能改变;作用域在定义时就确定,并且不会改变。
快级作用域
作用域链(Scope chain)
什么是自由变量?
什么是作用域链?(Scope chain)
关于自由变量的取值
作用域与执行上下文
参考文章和书籍
深入理解javascript原型和闭包系列
Web 前端面试指南与高频考题解析
JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
JavaScript 作用域和作用域链
深入理解ES6