面试中,面试官官常问到什么是闭包?
答:闭包是函数得一种特性,函数能够记忆住最初定义时的作用域环境,即使函数不在这个作用域运行,依然能够访问这个作用域的变量。
最简单的观察闭包:
function outer(){
var a = 10;
return function(){
console.log(a);
}
}
var f = outer();
f();
那么,问题来了,闭包到底有啥作用呢?
答案有两个:
1,可以做一个简单的可预测状态的容器。
function getApi(){
var a = 0;
return {
getA(){
return a;
},
add(){
a++;
}
}
}
var api = getApi();
console.log(api.getA());
api.add();
api.add();
api.add();
api.add();
console.log(api.getA());
2,在循环语句中使用异步,或者批量添加监听。
for(var i = 0 ; i < 10 ; i++){
(function(i){
setTimeout(function(){
console.log(i);
},2000);
})(i);
}
在这两个场景都可以使用闭包。
ps:希望对大家认识闭包有帮助,初来写博客,可能有很多不足,希望大家多交流沟通~~~