你不知道的 JavaScript(上)

这本书主要有两部分内容

  1. 作用域和闭包
  2. this 和原型对象

之前看过一部分,这次再看一遍顺便整理笔记。

作用域是什么

作用域是一套规则,用来管理引擎如何查找变量。

引擎查找变量的两种方式

  1. LHS 查询 (查找变量的引用,赋值操作的目标)
  2. RHS 查询(查找变量的值)

作用域的分类

  1. 全局作用域
  2. 函数作用域
  3. 块作用域

作用域嵌套

JavaScript 是一门编译语言。但与传统的编译语言不通,它不是提前编译的,编译结果也不能在系统中到处移植。

传统的解释和编译
解释执行:每次运行前解释器解释执行。
编译执行:编译成机器语言保存后,一次编译多次运行。

传统的编译步骤

  1. 分词/词法分析 将代码分解成词法单元 var a = 2; => var、a、=、2、;
  2. 解析/语法分析 转换成由元素逐级嵌套所组成的代表程序语法结构的树。抽象语法书(AST)
  3. 代码生成 将 AST 转换为可执行代码

JavaScript 在执行前都要进行编译(通常就在执行前)

作用域
作用域嵌套
词法作用域
函数作用域
块作用域