一、what?
闭包可以简单理解为:“定义在函数A内部的函数B”;其作用是让外部可以访问A内部变量
特性:
当外部调用函数A时,理论上函数执行完毕,它就要被弹出栈,但是由于B要用到A,所以A的变量被保存到内存中不被销毁。
这也导致了闭包中的变量是一直被保存的,除非手动清空 ,所以可以存储一些我们需要的状态和值
二、How?
针对上边闭包的特性,它主要能做什么呢?
(1)嵌套的回调函数
//声明存值
function getsingle(callback){
Post.get(req.session.user.name,function(err,posts){
posts.forEach(item=>{
if(item.goodsimage == image){
console.log(item);
sdetail = item;
callback(sdetail);
}
});
});
}
//实现解开
getsingle(function(data){
//除非里完成值的传递,上一级作用域拿不到里边的值
res.render('detail',{
title:'详情',
detail:data
});
});
(2)实现状态方法
或者说实现私有成员
var generateClosure = function() {
var count = 0;
var get = function() {
count ++;
return count;
};
return get;
};
var counter = generateClosure();
console.log(counter());// 输出 1
console.log(counter()); // 输出 2
console.log(counter()); // 输出 3
count值的变化只能是调用enerateClosure()方法,外部并不能访问,所以说它是一个私有成员