什么是闭包?闭包会用在哪里?(三座大山之二)
闭包,作用域应用的特殊情况,有两种表现:
- 函数作为参数被传递
- 函数作为返回值被返回
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