Javascript是一门编译语言,它不是提前编译的, 编译结果也不能在分布式系统中进行移植。
在传统编译语言的流程中, 程序中的一段源代码在执行之前会经历三个步骤, 统称为“编译”:
- 分词/词法分析(将由字符组成的字符串分解成(对编程语言来说) 有意义的代码块, 这些代
码块被称为词法单元 ) - 解析/语法分析 (将词法单元流(数组) 转换成一个由元素逐级嵌套所组成的代表了程序语法
结构的树。 这个树被称为“抽象语法树”(Abstract Syntax Tree, AST)。 ) - 代码生成(将 AST 转换为可执行代码的过程称被称为代码生成。 )
作用域是根据名称查找变量的一套规则,因为会存在作用域嵌套的情况,引擎从当前的执行作用域开始查找变量, 如果找不到,就向上一级继续查找。 当抵达最外层的全局作用域时, 无论找到还是没找到, 查找过程都会停止。
ReferenceError 同作用域判别失败相关, 而 TypeError 则代表作用域判别成功了, 但是对结果的操作是非法或不合理的。