闭包
作用域应用的特殊场景有两种表现
函数作为参数被传递
函数作为返回值被返回
//函数作为返回值
function create() {
const a = 100
return function () {
console.log(a)
}
}
const fn = create()
const a = 200
fn() // 100
// 函数作为参数被传递
function print(fn) {
const a = 200
fn()
}
const a = 100
function fn() {
console.log(a)
}
print(fn) // 100
// 所有的自由变量的查找,是在函数定义的地方,向上级作用域查找
// 不是在执行的地方!!!
闭包中的数据,被隐藏,不被外界访问
// !闭包
function isFirstLoad() {
var _list = [];
return function (id) {
if (_list.indexOf(id) >= 0) {
console.log(false);
} else {
_list.push(id);
console.log(true);
}
};
}
var isfirstLoad = isFirstLoad();
isfirstLoad(10); //true
isfirstLoad(20); //true
isfirstLoad(10); //false
isfirstLoad(20); //false
isfirstLoad(40); //true