闭包

发布时间 2024-01-12 20:09:02作者: continentliang

关于闭包

 

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 原来的闭包没了