一、什么是LSH和RSH
LSH:
找到变量,对其进行赋值操作,L
可以理解为变量在=
的左边,例如:let a = 10
,对变量进行赋值
示例:为=10
这个操作找到一个目标,这是一个LSH查找
a = 10
RSH: 获取变量的值
示例:查找并获取一个变量的值,这是一个RSH查找
console.log(a)
二、既有LSH,也有RSH
function fn(a) { // LSH:参数10传进来时进行了赋值操作
console.log(a) // RSH
}
fn(10) // 函数的调用需要对fn进行RSH查询
查找步骤:
fn
函数的调用,需要对fn
函数进行RSH
查找,并获取fn
函数- 当实参10传递给
fn
时,10会赋值给形参a
,此时进行了LSH
,隐式地进行了a = 10
- 对
a
进行RSH
查询,并且将得到的值给console.log()
。console.log()
本身也是RSH
查询,对console
对象进行RSH
,并且检查得到的值是否有个叫做log
的方法
三、总结
查询类型 | 目的 | 实例 | 查询方向 | 异常及处理 |
---|---|---|---|---|
LSH | 对变量进行赋值 | a = 2 | 在[[Scopes]]中从顶端向下查找,一直找到GO | 1、严格模式下会报错:Uncaught ReferenceError: a is not defined 2、非严格模式下,往window上添加一个同名属性(暗示全局变量) |
RSH | 获取变量的值 | console.log(a) | 同上 | 报错:Uncaught ReferenceError: a is not defined |