闭包 {#闭包}
闭包主要就是提升函数中变量的作用域,首先要理解作用域
- 函数作为返回值
function F1() {
var a = 100;
//返回一个函数(函数作为返回值)
return function () {
console.log(a);//自由变量,父作用域中查找
}
}
//f1得到一个函数
var f1 = F1();
var a = 200;
f1();
- 函数作为参数传递
function F1() {
var a = 100;
return function () {
console.log(a); //自由变量,父作用域中查找
}
}
var f1 = F1();
function F2(fn) {
var a = 200;
fn();
}
F2(f1);
- 实际开发中闭包的应用,主要作用于封装变量,收敛权限
//闭包实际应用中主要作用于封装变量,收敛权限
function isFirstLoad() {
var _list = [];
return function (id) {
if(_list.indexOf(id) >= 0){
return false;
}else {
_list.push(id);
return true;
}
}
}
// 应用
var firstLoad = isFirstLoad()
firstLoad(10) // true
firstLoad(10) // false;
firstLoad(20) // true