r代表右,l代表左。右英文中为right。左英文为Left,
《你不知道的JavaScript(上卷)》第一章 作用域是什么 「笔记」
三个概念
编译器查询变量的两种方式:LHS和RHS
作用域嵌刷
当一个块或函数嵌刷在另一个块或函数中时,就发生了作用域的嵌刷。因此,当在此前作用域中无法找到某个变量时,引擎就会在外层嵌刷的作用域中继续查找,直到找到该变量,或抵达最外层的作用域(即全局作用域)为止。
考察如下代码:
functionfoo(a){console.log(ab)}varb=2foo(2)//4
引擎抛出的两种异常
对RHS来说,如果找到全局作用域还是没找到,就会抛出ReferenceError异常。如果找到了,但是试图对该变量进行不合理的操作,例如对一个非函数类型的变量进行函数调用,或者引用null或undefined类型的值中的属性,那么会抛出TypeError异常
对LHS来说,如果在“非严格模式”下,需要被赋值的变量找不到,就会在全局创建一个具有该名称的变量,不会报错。而在“严格模式”下,会抛出同RHS查询失败时类似的ReferenceError异常。