javascript引擎LHS查询与RHS查询的区别

先说结论:LHS查询盒子,RHS查询值

例如:

LHS查询


var a = 2;

上面这一句赋值语句,对a变量执行的是LHS查询,它的目的是为 =2 的赋值操作找到一个目标,即一个盒子。

在编译器遇到 var a 时会询问作用域是否已存在一个叫a的变量,若存在则编译器会忽略该声明继续进行编译,若不存在则会要求作用域在当前作用域中声明一个新的变量并命名为 a

RHS查询


console.log(a);

上面这一句打印语句,对a变量执行的时RHS查询,因为它的目的是找到a变量内部的值并打印而不是给它进行赋值。

代码举例:


 1. function fn(a) { 	
 2. 	console.log(a); //1 
 3. } 
 4. fn(1);

1.第4行调用fn()函数时,对它的值进行了访问即一次RHS查询
2.调用fn函数时对它的形参a进行了赋值操作,即找一个名为a的变量盒子来存放1,进行了一次LHS查询
3.第2行打印a的值时查询了a变量内部的值因此进行了一次RHS查询



 1. function fn2(a) { 	 	
 2. 	var b = a; 	 	
 3. 	return a + b;  
 4. }  
 5. var c = fn2(2);
 

1.var c 声明变量LHS
2.fn2 调用函数RHS
3.fn2( 2 )形参赋值LHS
4.var b 声明变量LHS
5.b = a 获取a值RHS
6.return a + b 获取a值RHS
6.return a + b 获取b值RHS


执行RHS查询时,若遍寻所有上级作用域都无法找到该变量则抛出ReferenceError异常
而执行LHS查询,未找到该变量则会创建该变量,前提是当前处于非严格模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天长高了没1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值