深入理解JavaScript执行环境与作用域和作用域链

通常将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