查找嵌套作用域的规则:
引擎从当前的执行作用域开始查找变量,如果找不到,就向上一级继续查找。当抵达最外层的全局作用域时,无论找到还是没找到,查找过程都会停止。
LHS和RHS查询对找不到变量的处理是不同的,
若RHS直到全局作用域都没有找到变量,那么就会报 ReferenceError
的报错;
若LHS直到全局作用域都没有找到变量,如果处在非严格模式下,就会在全局作用域创建一个变量,否则同样报错ReferenceError
。
作用域嵌套
无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。
词法作用域查找只会查找一级标识符,比如a、b和c。如果代码中引用了foo.bar.baz,词法作用域查找只会试图查找foo标识符,找到这个变量后,对象属性访问规则会分别接管对bar和baz属性的访问。