什么是作用域
Posted gzhjj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是作用域相关的知识,希望对你有一定的参考价值。
几乎所有编程语言最基本的功能之一,就是能够储存变量中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。
这些变量在哪里?程序需要时如何找到它们?
这些问题说明需要一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域。
对于var a = 2;的处理:
变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对它赋值。
引擎在查找变量时执行怎样的查找,会影响最终的查找结果。
当变量出现在赋值操作的左侧时进行LHS查询,出现在右侧时进行RHS查询。
console.log(a);对a的引用是一个RHS引用,这里a并没有赋予任何值。相应地,需要查找并取得a的值,这样才能将值传递给console.log(..)。
a = 2;对a的引用是LHS引用,因为实际上我们并不关心当前的值是什么,只是 为=2这个赋值操作找到一个目标。
作用域是根据名称找变量的一套规则。
当一个块或函数嵌套在另一块或函数中时,就发生了作用域的嵌套。在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量,或抵达最外层的作用域为止。
以上是关于什么是作用域的主要内容,如果未能解决你的问题,请参考以下文章