# 各作用域的理解
# 释义
作用域指的是程序源代码 定义变量 的区域。
# 规定
其规定了如何查找变量,即确定了当前执行的代码段对于变量的访问权限。
# 静态作用域和动态作用域
- 静态作用域又称 词法作用域,其区间在 函数声明 的时候就已经决定了。
- 动态作用域,其区间在 函数调用 的时候才决定。
# 示例
尝试带着问题去阅读以下代码,思考作用域的运行过程:
- 最终的
console.log
输出了什么? - js是以哪种 作用域 来执行下段代码的?
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
// 结果是 ???
示例解析
假设JavaScript采用静态作用域,让我们分析下执行过程:
执行 foo 函数,先从 foo 函数内部查找是否有局部变量 value,如果没有,就根据书写的位置,查找上面一层的代码,也就是 value 等于 1,所以结果会打印 1。
...............................................
假设JavaScript采用动态作用域,让我们分析下执行过程:
执行 foo 函数,依然是从 foo 函数内部查找是否有局部变量 value。如果没有,就从调用函数的作用域,也就是 bar 函数内部查找 value 变量,所以结果会打印 2。
因为JavaScript采用的是静态作用域,所以这个例子的结果是 1。
# 参考文章
← 前端鉴权 回车url后,页面的变化过程 →