闭包
关于闭包
1.chatgpt的详细说明,我觉得已经很充分了
function 外部函数() {
// 外部函数作用域中定义的变量
let 外部变量 = 10;
// 内部函数(闭包)在外部函数内部定义
function 内部函数() {
// 访问外部函数作用域中的变量
console.log(外部变量);
}
// 返回内部函数,创建闭包
return 内部函数;
}
// 调用外部函数会返回内部函数,形成闭包
const 闭包示例 = 外部函数();
// 调用闭包时,它仍然可以访问外部变量
闭包示例(); // 输出:10
2.代码例子
let f; // 全局变量
const g = function () {
const a = 23; // 局部变量
f = function () {
console.log(a * 2);
};
};
const h = function () {
const b = 777;
f = function () {
console.log(b * 2);
};
};
g(); // 调用函数 g,此时 f 被赋值为一个闭包,该闭包能访问变量
f(); // 调用全局变量 f,!!!仍然可以访问外部变量,输出 a * 2
console.dir(f); // a = 23
// re-assiging f function
// f函数在h的可变环境下也是闭的
h();
f(); // 此处的f和上面的f不是一个,因为值被重新赋值了
console.dir(f); // b = 777 原来的闭包没了