闭包
# 闭包
可以访问另一个函数作用域中变量的函数。
函数可以访问该函数外部定义的变量
函数可以访问其他函数内部定义的变量
//最简单的闭包 访问全局变量
var sMessage = "hello world";
function sayHelloWorld() {
alert(sMessage);
}
sayHelloWorld();
//访问内部变量
function fun(){
var a=4;//局部变量
return a;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//计数器困境
var counter = 0;
function add() {
console.log(counter += 1);
}
add();
add();
add();
// 计数器现在为 3
function add() {
var counter = 0;
console.log(counter += 1);
}
add();//1
add();//1
add();//1
//匿名函数执行
var add = (function () {
var counter = 0;
return function () {console.log(counter += 1)}
})();
add();
add();
add();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- 闭包的特点:在函数内声明一个新的函数,并return内部函数
- 闭包会使函数中的变量一直存在,导致内存消耗过大,不能滥用
- 闭包不会被垃圾回收机制回收
# 闭包的好处:
- 希望一个变量长期存在内存中(开辟新的内存空间存放数据)
- 可以获取局部变量
- 避免全局污染