解释含意

var a,bvar a(LHS查问a) = 1;b(LHS查问b) = a(RHS查问a)

1、RHS查问与简略地查找某个变量的值别无二致,而LHS查问则是试图找到变量的容器自身,从而能够对其赋值。从这个角度说,RHS并不是真正意义上的“赋值操作的右侧”,更精确地说是“非左侧”

2、LHS和RHS的含意是“赋值操作的左侧或右侧”并不一定意味着就是“=赋值操作符的左侧或右侧”。赋值操作还有其余几种模式,因而在概念上最好将其了解为“赋值操作的指标是谁(LHS)”以及“谁是赋值操作的源头(RHS)”。

留神点

1、LHS和RHS查问都会在以后执行作用域中开始,如果有须要(也就是说它们没有找到所需的标识符),就会向下级作用域持续查找指标标识符,这样每次回升一级作用域(一层楼),最初到达全局作用域(顶层),无论找到或没找到都将进行。不胜利的RHS援用会导致抛出ReferenceError异样。不胜利的LHS援用会导致主动隐式地创立一个全局变量(非严格模式下)

2、查找只会查找一级标识符,比方a、b和c。如果代码中援用了foo.bar.baz,词法作用域查找只会试图查找foo标识符,找到这个变量后,对象属性拜访规定会别离接管对bar和baz属性的拜访。

3、如果RHS查问找到了一个变量,然而你尝试对这个变量的值进行不合理的操作,比方试图对一个非函数类型的值进行函数调用,或者援用null或undefined类型的值中的属性,那么引擎会抛出另外一种类型的异样,叫作TypeError。