第一章.疑惑1

2016-02-01  本文已影响131人  爱读书的阿啦嘞

疑惑

1.4节 【异常】中提到:

区分LHS和RHS的重要性在于:变量还没有声明(即任何作用域中都无法找到该变量)的情况下,二者行为是不同的。

如果RHS 查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 ReferenceError 异常。值得注意的是,ReferenceError 是非常重要的异常类型。相较之下,当引擎执行 LHS 查询时,如果在顶层(全局作用域)中也无法找到目标变量,全局作用域中就会创建一个具有该名称的变量,并将其返还给引擎,前提是程序运行在非 “严格模式”下。

而1.2.3节 【编译器有话说】中对LHS和RHS做出的定义是:

当变量出现在赋值操作的左侧时进行 LHS 查询,出现在右侧时进行 RHS 查询。讲得更准确一点,RHS 查询与简单地查找某个变量的值别无二致,而 LHS 查询则是试图 找到变量的容器本身,从而可以对其赋值。从这个角度说,RHS 并不是真正意义上的“赋值操作的右侧”,更准确地说是“非左侧”。

你可以将 RHS 理解成 retrieve his source value(取到它的源值),这意味着“得到某某的值”。

在概念上最好将它们理解为“赋值操作的目标是谁(LHS)”以及“谁是赋值操作的源头(RHS)”。

这个地方我并不是很理解,引入ES5的严格模式,可以解决上述问题,那么为什么需要区分LHS和RHS呢?

引入这两个名词的意义在哪里???

上一篇下一篇

猜你喜欢

热点阅读