什么是作用域

Posted gzhjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是作用域相关的知识,希望对你有一定的参考价值。

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

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

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

对于var a = 2;的处理:

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

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

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

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

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

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

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

以上是关于什么是作用域的主要内容,如果未能解决你的问题,请参考以下文章

什么是作用域, 什么事闭包, 什么事原型链

什么是快级作用域,es6中如何实现块级作用域

你真的理解JavaScript的作用域吗

什么是作用域链?

☀️作用域是什么?作用域链又是什么?你怎么理解?

☀️作用域是什么?作用域链又是什么?你怎么理解?