标签:pac sage 执行 自己 reference 组成 模式 引用 运行时
引用《你不知道的JavaScript》中的话,如下;
负责收集并维护由所有生命的标识符(变量)组成的一系列查询并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。
那么作用域实际上我理解的就是一种能力或者说在一定范围区域,他有父子之分,有嵌套之别。
概念性的内容不多说,主要是自己理解和在实际编程中使用。
在js执行时需要几个步骤、比如var a=2;
1.编译器会让作用域查询下是否存在变量a,如果有编译器将忽略、如果没有就创建一个变量命名为a
2.编译器为引擎生成运行时的代码,处理a=2的赋值操作,然后引擎为问作用域是否有a,没有的话继续向上寻找。
如果最终找到了a,就赋值。赋值就丢出一个
另一个要说的是LHS 查询和RHS 查询,
记住LHS 是 查询容器本身(或者说声明本身 比如 var a)
RHS 为赋值查询 (a=2)
L 与 R 是一种语义上的区别,并不一定非要在左边和右边,例如:
function fn(a){}; // LHS fn(2);// RHS
再说一个大家都知道的概念,关于作用域嵌套,还是 a=2;
var a = 2; function fn(){ console.log(a); // 2 }
LHS 和RHS 引用都会在一直向外寻找a,知道全局作用域为止。
有一个要注意的地方是:
function fn(a){ console.log(a+b); b = a; } fn(2);
这里会抛出异常,异常点在哪就是 a + b,这里引擎会进行RHS 查询,结果没找到,会抛出
var a ; a = 2; a();
标签:pac sage 执行 自己 reference 组成 模式 引用 运行时
原文地址:https://www.cnblogs.com/jony-it/p/10331488.html