为什么区分RHS与LHS是一件重要的事情?
因为在变量没有声明(在任何作用域都找不到该变量的情况下),这两种查询的行为是不一样的.
function foo (a) {
console.log(a + b);
return a + b;
}
foo(2);
第一次对b进行RHS查询是找不到该变量的.也就是说这是一个"未声明"的变量.
如果在rhs的所有嵌套的作用域查询中都无法找到该变量,js引擎就会抛出一个ReferenceError异常. ReferenceError是一个重要的异常.
相较之下, 当引擎执行 LHS 查询时, 如果在顶层( 全局作用域) 中也无法找到目标变量,
全局作用域中就会创建一个具有该名称的变量, 并将其返还给引擎, 前提是程序运行在非 “ 严格模式” 下。
“ 不, 这个变量之前并不存在, 但是我很热心地帮你创建了一个。”
来自 你不知道的js