通俗易懂的LHS和RHS
在一段代码执行之前,会经过编译阶段 。
在对程序的处理过程中,不可或缺的人物就是:引擎,编译器,作用域。
JavaScript在预编译后执行代码时,引擎就会对其进行查询,查询分为:
LHS:Left-Hand-Side
RHS:Right-Hand-Side
即赋值的左侧和右侧:当出现在赋值操作的左侧时进行LHS查询,出现在右侧时进行RHS查询。
例:
function foo(a){var b=a;
return a+b;
}
var c=foo(2);
在上述例子中,
像Kyle Simpson前辈一样,我们可以将自己当作引擎然后去和作用域进行对话,然后就会发现:有3处LHS查询,
分别是a=2 c=… b=…
有4处RHS查询
分别是:
foo(2… =a a… …b
RHS查询就相当于简单地查找某个变量的值
LHS查询是试图找到变量的容器本身,从而可以对其进行赋值。
因此在此例中:
c的赋值操作需要对c进行一次LHS查询,而对于foo(2)来说,需要进行一次RHS查询,去获取值.foo是一个函数,foo(a){},这里有一个隐式赋值操作,需要对a进行一次LHS查询,判断作用域中是否存在名为a的变量,若存在则直接赋值a=2;
不存在,(1)如果是严格模式下,则报ReferenceError:a is not defined.
(2)如果非严格模式,则创建一个a的全局变量,并直接赋值a=2;
在函数这个作用域内,var b = a;对b进行一次LHS查询,对a进行一次RHS查询
最终return a + b;需要分别对a和b进行RHS查询。
当一个函数嵌套在另一个函数中,即作用域的嵌套。则:在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量或到达最外层的作用域为止。
例:
function foo(c){console.log(c+d);
}
var d=2;
foo(2);
观察上述例子,我们发现在函数内部无法对d进行RHS引用,则向外继续查找,则在全局作用域中完成。
如何区分RHS和LHS
(1)若RHS查询在所有嵌套的作用域中找不到所需的变量,则引擎就会抛出ReferenceError异常
(2)若是执行LHS查询,若在全局作用域中也没有找到所需变量,则:1.程序运行在非严格模式下:全局作用域会创建一个具有该名称的变量,然后将其返回给引擎
2.程序运行在严格模式下:禁止自动或隐式地创建全局变量,因此引擎会抛出ReferenceError异常。
注:若查找的目的是对变量进行赋值,则使用LHS查询
若查找的目的是获取变量的值,则使用RHS查询。
通俗易懂的LHS和RHS相关推荐
- 【转】javascript中的LHS与RHS
原文链接:http://www.cnblogs.com/yangxiaoguai132/p/5064625.html 最近在学习javascript过程中,接触了LHS与RHS的概念,刚开始的时候有点 ...
- JavaScript : 对LHS和RHS两个名词的理解
首先见名知意,"L"和"R"的含义,它们分别代表左侧和右侧 一.LHS查询 赋值操作左侧的查询,LHS查询试图找到变量的容器本身,,从而对其赋值 二.RHS查询 ...
- JavaScript 的查询机制——LHS 与 RHS
JavaScript 引擎在查找一个变量的时候,有两种查找机制:LHS 和 RHS. RHS 的查询是简单地查找到某个变量的值,而 LHS 则是试图找到变量的容器的本身. 一个简单的例子:当我们执行 ...
- LHS和RHS的理解
LHS:赋值操作的目标 RHS:赋值操作的源头 LHS:当变量出现在赋值操作的左侧时进行LHS查询 LHS查询试图找到变量容器本 身 如果查找的目的是对变量进行赋值,就会使用LHS ...
- JavaScript中的LHS和RHS查询
文章是本人大三期间的学习笔记,一些论断取自书籍和网上博客,碍于当时的技术水平有一些写得不够好的地方,可以在评论处理智讨论~ 问题来源于<你不知道的JavaScript(上卷)>,文章部分论 ...
- LHS与RHS查询(已完结)
LHS与RHS查询 什么是LHS与RHS查询 如果查找的目的是对变量进行赋值,那么就会使用LHS 查询:如果目的是获取变量的值,就会使用RHS 查询 考虑以下代码: console.log(a); 其 ...
- 为什么区分LHS和RHS?
因为在变量还没声明(在任何作用域中都无法找到该变量)情况下,这两种查询行为是不一样的. LHS与RHS是JavaScript引擎的两种查找类型. RHS:需要获取那个变量的值,就是对那个变量的值进行R ...
- C++中LHS和RHS指什么
对于LHS和RHS,懂得都懂,不懂的一看就懂 LHS 赋值操作的左侧 Left Hand Side,一般指左值. RHS 赋值操作的右侧 Right Hand Side,一般指右值.
- Drools LHS与RHS常见语法
介绍 从下面rule规则整体结构可以看出,LHS其实指的是when后面的条件部分,RHS指的是then后面的结论部分 rule "name" attributes whenLHS ...
最新文章
- usaco snail trails(dfs)
- 解决执行go get时报错的问题:dial tcp: lookup xxx.com on 8.8.8.8:53: no such host
- 安装php时,make步骤报错make: *** [sapi/fpm/php-fpm] Error 1
- 计算机d,计算机词汇d
- 有关php链接MySql数据库的总结
- python更改整列小时分钟_利用python对excel中一列的时间数据更改格式操作
- SpringSecurity框架【详解】
- 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
- LINUX上ZIP的使用
- 【工具】中国菜刀 官方原版下载 官网下载链接
- 工业相机像元与像素之间的关系
- microsoftonenote_Microsoft OneNote 2017 官方免费版
- 修复苹果电脑运行过程中出现的声音、触摸板失灵、键盘错键、光标乱窜问题
- 浩辰cad电气2021 安装教程
- 【自动驾驶】Frenet坐标系与Cartesian坐标系(一)
- javaScript打气球小游戏
- 算法设计与分析期末总结
- UPC2020寒假训练第一场
- linux移植嵌入式系统,嵌入式系统学习——S3C2451之Linux移植步骤
- 用c语言实现简易三子棋
热门文章
- php jquery登录验证手机号码,jQuery电话号码验证实例
- Groovy快速入门指南
- css3夜空北斗七星闪烁动画js特效
- 2018.07.30 bzoj4355: Play with sequence(线段树)
- ati jti jwt 和_JWT jti和kid属性的说明
- Python - JS逆向破解实现翻译软件
- Eclipse中如何把自己写的方法封装成jar包供其他项目使用
- 教你如何查看SpringCloud Alibaba、Spring Clou 和 SpringBoot对应版本
- ​什么是gop_cache
- python--爬虫scrapy框架