最近在看一些js方面的文章跟书,其中你不知道的javascript(上)提到了LHS,RHS
通俗的理解LHS 是赋值操作可以把它看做往内存中存储值 而RHS 是取值操作可以把它看做从内存中检索值
不能单纯的用=号左边 右边去判断是LHS RHS
光说可能不够理解 🌰打开chrome的控制台输入一个abc
这里进行的就是RHS 取值操作 如果找不到这个值会抛出ReferenceError
接下来我们在输入abc = 123
abc =123 进行的LHS赋值操作 所以在abc = 123 操作之后我们再次RHS 取 abc的时候就能取到值不报错了
LHS 和 RHS 查询都会在当前执行作用域中开始,如果有需要(也就是说它们没有找到所需的标识符),就会向上级作用域继续查找目标标识符,这样每次上升一级作用域,最后到达全局作用域,无论找到或没找到都将停止。
最后在举个🌰
function foo(a) {
console.log( a )
}
foo( 2 );
当js编译器执行代码时候,它首先找到函数Foo 调用foo 此时就是一个RHS引用, 然后给函数foo传了参数2这时会隐式的赋值操作LHS赋值, foo函数里console 对象进行了一次RHS调用 然后在console.log(a)中a再一次被RHS查询