疑惑
1.4节 【异常】中提到:
区分LHS和RHS的重要性在于:变量还没有声明(即任何作用域中都无法找到该变量)的情况下,二者行为是不同的。
如果RHS 查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 ReferenceError 异常。值得注意的是,ReferenceError 是非常重要的异常类型。相较之下,当引擎执行 LHS 查询时,如果在顶层(全局作用域)中也无法找到目标变量,全局作用域中就会创建一个具有该名称的变量,并将其返还给引擎,前提是程序运行在非 “严格模式”下。
而1.2.3节 【编译器有话说】中对LHS和RHS做出的定义是:
当变量出现在赋值操作的左侧时进行 LHS 查询,出现在右侧时进行 RHS 查询。讲得更准确一点,RHS 查询与简单地查找某个变量的值别无二致,而 LHS 查询则是试图 找到变量的容器本身,从而可以对其赋值。从这个角度说,RHS 并不是真正意义上的“赋值操作的右侧”,更准确地说是“非左侧”。
你可以将 RHS 理解成 retrieve his source value(取到它的源值),这意味着“得到某某的值”。
在概念上最好将它们理解为“赋值操作的目标是谁(LHS)”以及“谁是赋值操作的源头(RHS)”。