在一段代码执行之前,会经过编译阶段 。
在对程序的处理过程中,不可或缺的人物就是:引擎,编译器,作用域。
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相关推荐

  1. 【转】javascript中的LHS与RHS

    原文链接:http://www.cnblogs.com/yangxiaoguai132/p/5064625.html 最近在学习javascript过程中,接触了LHS与RHS的概念,刚开始的时候有点 ...

  2. JavaScript : 对LHS和RHS两个名词的理解

    首先见名知意,"L"和"R"的含义,它们分别代表左侧和右侧 一.LHS查询 赋值操作左侧的查询,LHS查询试图找到变量的容器本身,,从而对其赋值 二.RHS查询 ...

  3. JavaScript 的查询机制——LHS 与 RHS

    JavaScript 引擎在查找一个变量的时候,有两种查找机制:LHS 和 RHS. RHS 的查询是简单地查找到某个变量的值,而 LHS 则是试图找到变量的容器的本身. 一个简单的例子:当我们执行 ...

  4. LHS和RHS的理解

    LHS:赋值操作的目标 RHS:赋值操作的源头 LHS:当变量出现在赋值操作的左侧时进行LHS查询      LHS查询试图找到变量容器本 身      如果查找的目的是对变量进行赋值,就会使用LHS ...

  5. JavaScript中的LHS和RHS查询

    文章是本人大三期间的学习笔记,一些论断取自书籍和网上博客,碍于当时的技术水平有一些写得不够好的地方,可以在评论处理智讨论~ 问题来源于<你不知道的JavaScript(上卷)>,文章部分论 ...

  6. LHS与RHS查询(已完结)

    LHS与RHS查询 什么是LHS与RHS查询 如果查找的目的是对变量进行赋值,那么就会使用LHS 查询:如果目的是获取变量的值,就会使用RHS 查询 考虑以下代码: console.log(a); 其 ...

  7. 为什么区分LHS和RHS?

    因为在变量还没声明(在任何作用域中都无法找到该变量)情况下,这两种查询行为是不一样的. LHS与RHS是JavaScript引擎的两种查找类型. RHS:需要获取那个变量的值,就是对那个变量的值进行R ...

  8. C++中LHS和RHS指什么

    对于LHS和RHS,懂得都懂,不懂的一看就懂 LHS 赋值操作的左侧 Left Hand Side,一般指左值. RHS 赋值操作的右侧 Right Hand Side,一般指右值.

  9. Drools LHS与RHS常见语法

    介绍 从下面rule规则整体结构可以看出,LHS其实指的是when后面的条件部分,RHS指的是then后面的结论部分 rule "name" attributes whenLHS ...

最新文章

  1. usaco snail trails(dfs)
  2. 解决执行go get时报错的问题:dial tcp: lookup xxx.com on 8.8.8.8:53: no such host
  3. 安装php时,make步骤报错make: *** [sapi/fpm/php-fpm] Error 1
  4. 计算机d,计算机词汇d
  5. 有关php链接MySql数据库的总结
  6. python更改整列小时分钟_利用python对excel中一列的时间数据更改格式操作
  7. SpringSecurity框架【详解】
  8. 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
  9. LINUX上ZIP的使用
  10. 【工具】中国菜刀 官方原版下载 官网下载链接
  11. 工业相机像元与像素之间的关系
  12. microsoftonenote_Microsoft OneNote 2017 官方免费版
  13. 修复苹果电脑运行过程中出现的声音、触摸板失灵、键盘错键、光标乱窜问题
  14. 浩辰cad电气2021 安装教程
  15. 【自动驾驶】Frenet坐标系与Cartesian坐标系(一)
  16. javaScript打气球小游戏
  17. 算法设计与分析期末总结
  18. UPC2020寒假训练第一场
  19. linux移植嵌入式系统,嵌入式系统学习——S3C2451之Linux移植步骤
  20. 用c语言实现简易三子棋

热门文章

  1. php jquery登录验证手机号码,jQuery电话号码验证实例
  2. Groovy快速入门指南
  3. css3夜空北斗七星闪烁动画js特效
  4. 2018.07.30 bzoj4355: Play with sequence(线段树)
  5. ati jti jwt 和_JWT jti和kid属性的说明
  6. Python - JS逆向破解实现翻译软件
  7. Eclipse中如何把自己写的方法封装成jar包供其他项目使用
  8. 教你如何查看SpringCloud Alibaba、Spring Clou 和 SpringBoot对应版本
  9. ​什么是gop_cache
  10. python--爬虫scrapy框架