logo头像

桃李不言,下自成蹊

JavaScript笔记整理第5篇

关于Javascript中闭包的简单总结
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
    //闭包
/**
* 闭包的概念:函数B可以访问函数A中定义的变量或者是数据,此时就形成了闭包
* 闭包的作用:缓存数据,延长作用域链
* 闭包的模式:函数的闭包,对象的闭包
* 闭包的优点和缺点:缓存数据,内存泄露
* 闭包的应用
*
*
*
* */
//预热:
function f1() {
var num = 100;
function f2() {
num++;
console.log(num);
}
f2();
}
f1();//101
f1();//101
f1();//101

function f1() {
var num = 100;
return function () {
num++;
console.log(num)
}
}
var ff = f1();
ff()//101
ff()//102
ff()//103






//案例:
//函数模式的闭包
function f1() {
var num = 10
function f2() {
console.log(num)
}
f2()
}
f1();//10


//对象模式的闭包
function f2() {
var num = 10;
var obj = {
age:num
}

console.log(obj.age);
}
f2();//10


//闭包产生相同的随机数
function showRandom(){
var a = parseInt(Math.random()*10+1);
console.log('随机数',a)
return a;
}
showRandom();
showRandom();
showRandom();

function f1() {
var random = showRandom();//变量random会被缓存
return function () {
console.log(random)
}
}

var ff = f1();
ff()
ff()
ff()
//总结:如果要缓存数据,就把这个数据放在外层的函数和里层的函数的中间位置
//闭包的作用:优点:缓存数据,缺点:没有及时的释放
//局部变量是在函数中,函数使用结束后,局部变量就会被自动的释放
//闭包后,里面的局部变量的使用作用域链就会被延长

//利用闭包实现点赞数据缓存
var btns = document.getElementsByTagName('input');
function getValue() {
var val = 2; //闭包缓存的数据
return function () {
//每一次点击,改变当前点击按钮的值
this.value = "点赞 ("+(val++)+ ")";
}
}
for(var i = 0 ; i < btns.length;i++){
btns[i].onclick = getValue();
}
支付宝打赏 微信打赏

您的支持是对作者最大的肯定