关于javascript:变量查询的两种方式LHS和RHS

6次阅读

共计 637 个字符,预计需要花费 2 分钟才能阅读完成。

解释含意

var a,b
var 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。

正文完
 0