javascript 的词法作用域是指变量的访问范围在代码编写阶段(即定义时)就已经确定,而不是在执行时动态决定。理解它的关键在于识别函数声明的位置以及嵌套关系,这直接决定了内部函数能否访问外部函数的变量。

如何判断变量属于哪个作用域
判断变量归属的核心规则是“就近原则”和“链式查找”。当代码引用一个变量时,引擎会先从当前执行上下文开始查找,如果找不到,就沿着作用域链向上层作用域查找,直到全局作用域。如果全局也找不到,就会抛出 ReferenceError。这种静态结构意味着,即使函数被移动到不同的地方调用,它依然能访问到定义它时的外层环境。

function outer() {
let a = 1;
function inner() {
console.log(a); // 1
}
return inner;
}
const fn = outer();
fn();
为什么闭包能保留外部变量
闭包之所以能保留外部变量,是因为内部函数引用了外部函数的局部变量,导致这些变量无法被垃圾回收机制释放。只要内部函数存在并持有引用,外部函数的执行上下文就会一直驻留在内存中。这种现象在循环或回调函数中非常常见,开发者需要特别注意变量共享的问题。

function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











