作用域的定义
作用域(Scope)指程序中定义的变量、函数或对象的可访问范围。它决定了代码中哪些部分可以访问特定的标识符(如变量名)。作用域分为静态作用域(词法作用域)和动态作用域,大多数现代编程语言采用静态作用域。
常见作用域类型
全局作用域
在函数或代码块外部声明的变量属于全局作用域,可在程序的任何位置访问。
var globalVar = "I'm global";
function foo() {
console.log(globalVar); // 可访问
}
局部作用域
在函数或代码块内部声明的变量仅在其所属范围内有效。
def func():
local_var = "I'm local"
print(local_var) # 可访问
# print(local_var) # 报错:未定义
块级作用域
由 {} 或其他块结构(如 if、for)形成的范围,常见于支持块作用域的语言(如 ES6 的 let/const)。
if (true) {
let blockVar = "I'm block-scoped";
console.log(blockVar); // 可访问
}
// console.log(blockVar); // 报错
作用域链
当访问一个变量时,解释器会从当前作用域开始逐级向上查找,直到全局作用域。若未找到则报错。
let outer = "outer";
function parent() {
let inner = "inner";
function child() {
console.log(inner); // 访问父作用域的变量
}
child();
}
parent();
闭包与作用域
闭包(Closure)是函数与其词法环境的结合,允许函数访问其定义时所处作用域的变量,即使函数在其他作用域调用。
function outer() {
let count = 0;
return function inner() {
count++;
return count;
};
}
const counter = outer();
console.log(counter()); // 输出 1(保留对 count 的引用)
作用域的重要性
- 避免命名冲突:隔离不同范围的变量名。
- 内存管理:局部变量在作用域结束后可被垃圾回收。
- 代码模块化:通过闭包实现私有变量或模块化设计。

被折叠的 条评论
为什么被折叠?



