变量的赋值操作会执行两个动作:
- 编译器在当前作用域 声明 一个变量(如果之前有声明,则忽略,继续编译)
- 运行时,引擎在作用域查找该变量,如果找到就 赋值 ,否则抛异常
作用域是根据名称查找变量的一套规则,确定在何处以及如何查找变量
作用域链
作用域可以嵌套,在当前作用域找不到某个变量时,引擎会在外层嵌套的作用域中继续查找,直到找到该变量(找到第一个就停止)或抵达最外层的作用域(全局作用域)为止
ReferenceError 引用错误,同作用域判别失败相关
TypeError 作用域判别成功,但是对结果的操作是非法或不合理的
LHS查询 对变量进行赋值
RHS查询 获取变量的值
词法作用域由书写代码时函数声明的位置决定
函数作用域
属于这个函数的全部变量都可以在整个函数的范围内使用及复用
区别函数声明和函数表达式的方法,如果function是第一个词,那就是函数声明
立即执行函数(IIFE)是一个函数表达式
作用域分类
- 函数作用域
- 块作用域