Skip to content

什么是闭包?闭包会用在哪里?(三座大山之二)

闭包,作用域应用的特殊情况,有两种表现:

  • 函数作为参数被传递
  • 函数作为返回值被返回
js
// 函数作为返回值
function create() {
  const a = 100;
  return function () {
    console.log(a);
  };
}
const fn = create();
const a = 200;
fn(); //100
js
//函数作为参数被传递
function print(func) {
  const b = 200;
  func();
}
const b = 100;
function func() {
  console.log(b);
}
print(func); // 100

闭包:自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方查找!!!

实际开发中闭包的应用

  • 隐藏数据,只提供 API
  • 如做一个简单的 cache 工具
js
// 闭包隐藏数据,只提供API,类似一个简单的cache工具
function createCache() {
  const data = {}; //闭包中的数据被隐藏,不被外界访问
  return {
    set: function (key, val) {
      data[key] = val; //缓存数据
    },
    get: function (key) {
      return data[key];
    },
  };
}
const c = createCache();
c.set('a', 100);
console.log(c.get('a')); // 100

基于 MIT 许可发布