前言
最近在看《你不知道的JavaScript》,有很多知识点枯燥并且难懂,所以每学习完一节不懂得新知识点就记录一下,加深记忆
1.1 理解作用域
简单记忆
书中1.2.3提到了之前没接触过的新知识点,LHS和RHS查询,书中的解释是
赋值操作的左侧或右侧
可理解为:
LHS:给变量赋值;RHS:获取变量的值。
简单的记忆就是,获取值获取的是等号右边的值,所以是RHS; 给变量赋值,一般是等号的左边,所以是LHS。(但是不能简单的用等号判断)
原文举例
console.log(a) ;复制代码
我要打印a,就要获取a的值,所以是RHS查询,对a的引用为RHS引用
a = 2;复制代码
这是给a赋值,将2赋值给a——LHS
function foo(a){ console.log(a) // 2}foo(2)复制代码
foo(..)可看做一个变量(实际是函数的调用),所以是去获取foo(..)的值——RHS
function foo(a)中是要给a赋值——LHS
log(a)中是要去获取a的值——RHS
原文测试题
function foo(a){ var b = a; return a + b;}var c = foo(2)复制代码
var c, c = .. :给c赋值——LHS
function foo(a),a = 2:给a赋值——LHS
var b, b = 2:给b赋值——LHS
foo(2):获取foo(..)的值——RHS
var b = a中对a的引用:获取a的值——RHS
a + b,对a:获取a的值;对b:获取b的值——RHS(两个)
作用
不成功的 RHS 引用会导致抛出 ReferenceError 异常。不成功的 LHS 引用会导致自动隐式 地创建一个全局变量(非严格模式下),该变量使用 LHS 引用的目标作为标识符,或者抛 出 ReferenceError 异常(严格模式下)。