We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LHS和RHS的概念也是最近从《你不知道的JavaScript》学习到的,LHS是指Left-hand Side,而RHS是指Right-hand Side。二者区别就是关于作用域对变量的查询目的是变量赋值还是查询。 LHS也就是可以理解为变量在赋值操作符(=)的左侧,例如 a = 1,当前引擎对变量a查找的目的是变量赋值。 RHS可以理解为变量在赋值操作符(=)的右侧,例如:var b = a,其中引擎对变量a的查找目的就是查询。
(=)
a = 1
var b = a
a
那么对于下面一个简单的语句:
var a = 1;
对于上述语句,可以分解成一下两步:
var a; a=1
首先第一步执行LHS,引擎通知词法作用域,查询对应的作用域中是否存在该变量a,词法作用域发现当前作用域中不存在变量a,则在当前作用域中声明变量a;然后第二步执行RHS,对查询到的变量a进行赋值。 在举一个例子:
function fn(a){ console.log(a+b); b=a; } fn(2);
编译器对console.log()中的b执行的是RHS查询,如果查询不到的话,会抛出ReferenceError的错误。如果在执行LHS中查询不到对应的变量,在非严格模式下会创建变量并且进行赋值,如果在执行RHS查询的过程中,对查询到的变量操作不正确,例如对非函数(undefined,null)执行函数操作时,会报出TypeError的错误。这样就合理的解释了下面的例子
console.log()
undefined
null
(function(){ a=100; })(); console.log(a);//100
之前的理解是如果不对变量a采用var声明的时候,自动创建的是全局变量,其实现在我们就可以合理的解释,首先a=100对变量a执行的是LHS查询,当前作用域中不存在a,会一直向上查找,直到全局作用范围中仍然无法找到该变量,因为是在非严格模式下(严格模式会直接报ReferenceError的错误),所以编译器会自动在全局范围中创建变量a,并赋值100,这样我们所观察到的结果就是在全局范围中创建了变量a。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
LHS和RHS的概念也是最近从《你不知道的JavaScript》学习到的,LHS是指Left-hand Side,而RHS是指Right-hand Side。二者区别就是关于作用域对变量的查询目的是变量赋值还是查询。
LHS也就是可以理解为变量在赋值操作符
(=)
的左侧,例如a = 1
,当前引擎对变量a查找的目的是变量赋值。RHS可以理解为变量在赋值操作符
(=)
的右侧,例如:var b = a
,其中引擎对变量a
的查找目的就是查询。那么对于下面一个简单的语句:
对于上述语句,可以分解成一下两步:
首先第一步执行LHS,引擎通知词法作用域,查询对应的作用域中是否存在该变量a,词法作用域发现当前作用域中不存在变量a,则在当前作用域中声明变量a;然后第二步执行RHS,对查询到的变量a进行赋值。
在举一个例子:
编译器对
console.log()
中的b执行的是RHS查询,如果查询不到的话,会抛出ReferenceError的错误。如果在执行LHS中查询不到对应的变量,在非严格模式下会创建变量并且进行赋值,如果在执行RHS查询的过程中,对查询到的变量操作不正确,例如对非函数(undefined
,null
)执行函数操作时,会报出TypeError的错误。这样就合理的解释了下面的例子之前的理解是如果不对变量a采用var声明的时候,自动创建的是全局变量,其实现在我们就可以合理的解释,首先a=100对变量a执行的是LHS查询,当前作用域中不存在a,会一直向上查找,直到全局作用范围中仍然无法找到该变量,因为是在非严格模式下(严格模式会直接报ReferenceError的错误),所以编译器会自动在全局范围中创建变量a,并赋值100,这样我们所观察到的结果就是在全局范围中创建了变量a。
The text was updated successfully, but these errors were encountered: