美文网首页
从LHS与RHS角度浅谈Js变量声明与赋值

从LHS与RHS角度浅谈Js变量声明与赋值

作者: 酱油啊_ | 来源:发表于2017-01-06 21:24 被阅读0次

LHS和RHS的概念也是最近从掘金学习到的,LHS是指Left-hand Side,而RHS是指Right-hand Side。二者区别就是关于作用域对变量的查询目的是变量赋值还是查询。 LHS也就是可以理解为变量在赋值操作符(=)的左侧,

例如 a = 1

,当前引擎对变量a查找的目的是变量赋值。 RHS可以理解为变量在赋值操作符(=)的右侧,

例如:var b = a

其中引擎对变量a的查找目的就是查询。  那么对于下面一个简单的语句:

var a = 1;

对于上述语句,可以分解成一下两步:

1  . var a;
2  . a=1

首先第一步执行LHS,引擎通知词法作用域,查询对应的作用域中是否存在该变量a,词法作用域发现当前作用域中不存在变量a,则在当前作用域中声明变量a;然后第二步执行RHS,对查询到的变量a进行赋值。
在举一个例子:


function fn(a){
console.log(a+b);
b=a;
}
fn(2);

编译器对console.log()
中的b执行的是RHS查询,如果查询不到的话,会抛出ReferenceError的错误。如果在执行LHS中查询不到对应的变量,在非严格模式下会创建变量并且进行赋值,如果在执行RHS查询的过程中,对查询到的变量操作不正确,例如对非函数(undefined,null)执行函数操作时,会报出TypeError的错误。
这样就合理的解释了下面的例子

(function(){
a=100;
})();
console.log(a);//100

之前的理解是如果不对变量a采用var声明的时候,自动创建的是全局变量,其实现在我们就可以合理的解释,首先a=100对变量a执行的是LHS查询,当前作用域中不存在a,会一直向上查找,直到全局作用范围中仍然无法找到该变量,因为是在非严格模式下(严格模式会直接报ReferenceError的错误),所以编译器会自动在全局范围中创建变量a,并赋值100,这样我们所观察到的结果就是在全局范围中创建了变量a。

相关文章

  • 从LHS与RHS角度浅谈Js变量声明与赋值

    LHS和RHS的概念也是最近从掘金学习到的,LHS是指Left-hand Side,而RHS是指Right-han...

  • 你不知道的JavaScript(上卷)(作用域和闭包)

    RHS查询,LHS查询 变量的赋值过程 RHS查询与简单地查找某个变量的值没有什么差别,但是LHS查询则是试图找到...

  • 你所不知道的JavaScript上.一

    作用域 LHS,查找的目的是对变量进行赋值。RHS,查找的目的是获取变量的值。LHS 和 RHS 查询都会在当前作...

  • 关于JavaScript的RHS与LHS

    作用域中LHS查询和RHS查询 LHS查询:赋值操作左侧的查询,LHS查询试图找到变量的容器本身,,从而对其赋值。...

  • 作用域

    LHS与RHS引用 LHS和RHS的含义是“赋值操作的左侧或右侧”并不一定意味着就是"= 赋值操作符的左侧或右侧"...

  • [JS] LHS RHS with let catch

    1. LHS和RHS RHS(right-hand side)查询与简单地查找某个变量的值别无二致,而LHS(le...

  • LHS查询 RHS查询

    引擎通过LHS查询 给变量赋值(赋值操作 比如var a =)引擎通过RHS查询 去取值(调用变量的时候 cons...

  • LHS和RHS

    LHS 和 RHS LHS 赋值操作的左侧 Left Hand SideRHS 赋值操作的右侧 Right H...

  • Node.js相关知识

    一、你不知道的JavaScript 1、作用域 作用域 LHS RHS RHS查询与简单地查找某个变量的值别无二...

  • 你不知道的JS(一)

    1、RHS(Right-Hand-Side)查询与LHS(Left-Hand-Side)查询 “RHS 查询与简单...

网友评论

      本文标题:从LHS与RHS角度浅谈Js变量声明与赋值

      本文链接:https://www.haomeiwen.com/subject/zhgxvttx.html