你不知道的JavaScript学习小结(更新中)

422 阅读1分钟

前言

最近在看《你不知道的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 异常(严格模式下)。