有趣的js作用域

1. 定义变量

举例:

var a = 2;

解释:

  1. 三个主人翁:
    • 引擎:从头到尾负责整个JavaScript程序的编译和执行过程。
    • 编译器:引擎的搭档,负责语法分析及代码生成等脏活累活。
    • 作用域:引擎另一个搭档,负责收集并维护有所有声明的标识符(变量)组成的一系列查询,并有一套严格的规则,能决定当前执行的代码对这些标识符的访问权限。
  2. 两步操作:
    • 编译器定义一个内存,命名为a
    • 引擎把2赋值给内存a

LHS查询和RHS查询

var a = 2;
var b= 1 + a;
  1. LHS查询:查询到一个变量,对其进行赋值的过程 (如:a=2的过程)
  2. RHS查询:查询到一个变量,并用其值的过程 (如:b= 1 + a 用到了a的值)

作用域

var a = 1;
function foo(){
	var b = 2
	var c = a + b
}
foo()

解释:

  1. 引擎:局部作用域,老弟,我要进行a+b,你有a和b吗?
  2. 局部作用域:引擎大哥,我有b,但是没找到a。
  3. 引擎:好的,那我去问我全局作用域大哥。
  4. 引擎:全局作用域大哥,你有a吗?
  5. 全局作用域:引擎老弟,我刚好有a,给你。
  6. 引擎:局部作用域老弟,你有c吗?
  7. 局部作用域:引擎大哥,我刚好有c,给你。

总结
作用域就是一个变量所覆盖的范围,当引擎用到变量时,会向作用域寻找变量,如果找到变量,就可以拿过使用。如果没有找到,便会向上一级继续寻找,知道找到为止。在最外部(全局作用域)也没有找,则会抛出referenceerror错误(在ES5引入“严格模式”之前,会新声明一个内存区间并命名)。LHS和RHS是一个小知识点,有兴趣的大家可以了解一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值