一、什么是闭包?
闭包的定义存在很多种,例如:
1、闭包就是能够读取其他函数内部变量的函数。
2、闭包是指有权访问另一个函数作用域中变量的函数。
3、闭包是指一个函数可以记住其外部变量并可以访问这些变量。
总体而言,闭包是一个函数与创建函数的作用域之间的连接,闭包“关闭”了函数的自由变量。
二、闭包的优点
1.内部函数可以访问外部函数的局部变量
- 闭包的基本代码格式(示例):
function fun1(){
var data = 1;
function fun2(){
console.log('data:',data); // 1
}
return fun2;
}
var fun = fun1();
fun();
- 如下代码:
思考下为何会如此输出?
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i++);
}, 5000);
}
console.log(i);
输出:
5
5
6
7
8
9
- 使用闭包的方式可以使得输出结果为0 1 2 3 4
for (var i = 0; i < 5; i++) {
(function (i) {
setTimeout(() => {
console.log(i++);
}, 5000);
})(i);
}
console.log(i);
输出:
5
0
1
2
3
4
二、闭包的缺点
1、变量会驻留在内存中,造成内存损耗问题
解决方法:把闭包的函数设置为null