作用域闭包

作用域

几乎所有编程语言最基本的功能之一,就是能够储存变量中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。

这些变量在哪里?程序需要时如何找到它们?

这些问题说明需要一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域。

对于var a = 2的处理:

变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对它赋值。

引擎在查找变量时执行怎样的查找,会影响最终的查找结果。

当变量出现在赋值操作的左侧时进行LHS查询,出现在右侧时进行RHS查询。

console.log(a)对a的引用是一个RHS引用,这里a并没有赋予任何值。相应地,需要查找并取得a的值,这样才能将值传递给console.log(..)。

a = 2对a的引用是LHS引用,因为实际上我们并不关心当前的值是什么,只是 为=2这个赋值操作找到一个目标。

作用域是根据名称找变量的一套规则。

当一个块或函数嵌套在另一块或函数中时,就发生了作用域的嵌套。在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量,或抵达最外层的作用域为止。

猜你喜欢

转载自www.cnblogs.com/gzhjj/p/9014556.html