js的两种查询方式 LHS and RHS
为了进一步理解,我们需要多介绍一点编译器的术语。
编译器在编译过程的第二步中生成了代码,引擎执行它时,会通过查找变量 a 来判断它是
否已声明过。查找的过程由作用域进行协助,但是引擎执行怎样的查找,会影响最终的查
找结果。
在我们的例子中,引擎会为变量 a 进行 LHS 查询。另外一个查找的类型叫作 RHS。
我打赌你一定能猜到“L”和“R”的含义,它们分别代表左侧和右侧。
什么东西的左侧和右侧?是一个赋值操作的左侧和右侧。
换句话说,当变量出现在赋值操作的左侧时进行 LHS 查询,出现在右侧时进行 RHS 查询。
讲得更准确一点,RHS 查询与简单地查找某个变量的值别无二致,而 LHS 查询则是试图
找到变量的容器本身,从而可以对其赋值。从这个角度说,RHS 并不是真正意义上的“赋
值操作的右侧”,更准确地说是“非左侧”。
你可以将 RHS 理解成 retrieve his source value(取到它的源值),这意味着“得到某某的
值”。
LHS(Left-hand Side):left是指“=”号的左边,意思是要给查询得到的这个变量赋值,比如要吧1付给a变量,要先查询a是否存在,这时候用的就是LHS查询
RHS(Right-hand Side):right指的是“=”号右边,意思是要获取某个变量的值,比如打印a变量,console.log(a);js引擎要去查询这个变量是否存在,得到变量只想的值,这个时候用的就是RHS查询
LHS查询比较松散,如果查询不到,就会创建一个全局的,不会抛出异常
RHS查询比较严格,如果查询不到的话就会抛出异常,因为你要获取某个变量指向的值,可是根本就没有那个变量,这个时候已经超出它的能力范围,所以只能抛出异常
其实这也是符合js的松散的本性,好比你要给钱某个人,找不到那个人,我就用它的名义领了,毕竟这不吃亏,这是LHS,但是如果你是追债,那必须要找到欠你的钱那个人,我不可能替你还钱的,这就是RHS,如果找不到只能报警,抛出异常
看到这里就能理解为什么使用未定义的变量有时候报错有事不报错了
如果是访问对象的属性就不存在LHS查询和RHS查询了,找不到就返回undefined
js的两种查询方式 LHS and RHS的更多相关文章
- easyui datagride 两种查询方式
easyui datagride 两种查询方式function doReseach() { //$('#tt').datagrid('load', { // FixedCompany: $('.c_s ...
- 关于使用lazytag的线段树两种查询方式的比较研究
说到线段树,想来大家并不陌生——最基本的思路就是将其规划成块,然后只要每次修改时维护一下即可. 但是尤其是涉及到区间修改时,lazytag的使用往往能够对于程序的质量起到决定性作用(Ex:一般JSOI ...
- Js的两种post方式
第一种提交post的方式是传统方式,判断浏览器进行post请求. var xmlobj; //定义XMLHttpRequest对象 function CreateXMLHttpRequest() { ...
- mysql查询字段类型为json时的两种查询方式。
表结构如下: id varchar(32) info json 数据: id = info = {"age": "18","di ...
- JS 数组两种定义方式
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- KbmMW两种查询结果集通讯方式
KbmMW本身可以用QueryService的方式进行远程数据查询,但是SmpileService同样具有很强的扩展性可以实现数据查询,下面展示两种基于SmpileService的远程数据查询方法,其 ...
- Oracle数据库日期范围查询的两种实现方式
参考文档:http://database.51cto.com/art/201108/288058.htm Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通 ...
- 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解
1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...
- 记Bootstrap Table两种渲染方式
这里主要区别两种Bootstrap Table的数据渲染方式,一.属性渲染方式,二.JS渲染方式 工作直接接手前人的,之前都直接在table标签上渲染属性,后面因为项目需要,同一页面的表格,需要申请不 ...
随机推荐
- 机器视觉:Convolutional Neural Networks, Receptive Field and Feature Maps
CNN 大概是目前 CV 界最火爆的一款模型了,堪比当年的 SVM.从 2012 年到现在,CNN 已经广泛应用于CV的各个领域,从最初的 classification,到现在的semantic se ...
- GoogLeNet 神经网络结构
GoogLeNet是2014年 ILSVRC 冠军模型,top-5 错误率 6.7% ,GoogLeNet做了更大胆的网络上的尝试而不像vgg继承了lenet以及alexnet的一些框架,该模型虽然有 ...
- python3 csv数据读入/写出
这是读入 1 import csv 2 #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() 3 with open("XXX ...
- matlab中freqz的用法以及多项式的展开
对于一个变量a,matlab中定义需要这样 syms a: 定义之后就可以写由变量组成的式子,比如 c=(1+a^-1)^5; 可以用expand(c) 就能把c展开成多项式,每一项的系数就可以看到. ...
- 调用 Windows 7 中英文混合朗读
1.windows7内置语音识别 2.文本到语音转换增加了 Microsoft Lili - Chinese(China) ,支持中英文混合朗读 3.女声.部分词组基本发音准确 以上让我有做个小程序的 ...
- [Client] looks like we got no XML document in....
无wsdl方式应用webservice时,服务端包含了 include_once'inc/utility_all.php '一直报[Client] looks like we got no XML d ...
- laravel查看sql语句
我自己是用第一种方法来调试的,第三种不行 不知道为啥 laravel查看sql语句 方法一: 我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 ...
- Secure CRT修改文件夹的颜色
secureCRT有一个很大的问题是,如果设置Emulation Terminal 为Linux模式,则ls的时候,目录的蓝色跟背景的黑色非常接近,很难看清楚,修改办法 option->Glob ...
- Rest之路 - 介绍篇
What is REST ? REST 是 REpresentational State Transfer 的缩写.是一种基于HTTP协议来进行进行数据交换的web标准框架.她的思想是:视组件为资源. ...
- SQL Server2005中文版x64安装29506错误解决办法
在使用SQL Server 2005简体中版安装时,使用X86(32位操作系统下)安装没有出现任何问题.可是在X64(64位操作系统下)安装过程没有出现问题,可是安装完成后却没有Microsoft S ...