什么是作用域?
scope 在任何编程语言中,都有一套定义变量值、变量作用范围的规则,这个规则就是作用域。
作用域决定了代码区块中变量和其他资源的可见性。
作用域主要有两种模型:
- 一种是词法作用域,这是大多数编程语言采用的模型,JavaScript 采用的也是这种工作模型;
- 另一种是动态作用域。
简单地说,词法作用域就是定义在词法阶段的作用域。
-
词法作用域由你在写代码时将变量和块作用域写在哪里决定,并且在词法分析阶段保持不变。
-
动态作用域是关联在程序执行期间的,对于函数来说就是函数执行的位置决定这个函数所属的范围。
查看一个例子
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
// 结果是 ???
js 采用词法作用域,在函数 foo定义的位置,value值为 1, 所以,console打印 1。
js的作用域分类
- 全局作用域
- 函数作用域
- 块作用域