Cirry's Blog

匿名函数和闭包

2017-01-05
技术
js
最后更新:2024-04-02
3分钟
457字

印象笔记迁移

匿名函数:

1
function(){return 'dog';} //匿名函数直接运行报语法错误,无法调用

匿名函数赋值给变量:

1
var box = function(){return 'dog';}; //可以
2
box();

通过自我执行来执行匿名函数:

1
(function(){ //(匿名函数)();
2
return 'dog';
3
})(); //等于上面的程序

自我执行匿名函数的传参:

1
(function(age){
2
return age;
3
})(20);

函数里的匿名函数:

1
function box() {
2
return function () { //闭包
3
return 'dog';
4
};
5
}
6
7
alert(box()()); //dog,执行普通函数里的匿名个函数,或者用下面的办法
8
var b = box(); //同上
9
alert(b());

闭包:闭包是在有权访问另一个函数作用于中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量 通过闭包返回局部变量:

1
function box(){
2
var age = 100;
3
}
4
alert(age); //访问不到
5
function box(){
6
var age = 20;
7
return function(){
8
return age;
9
}
10
}
11
alert(box()()); //这种方式可以

使用闭包的优点和缺点:就是可以把局部变量驻留在内存中,可以避免使用全局变量

1
//使用全局变量累加
2
var age = 100;
3
function box(){return age++;}
4
alert(age); //100
5
box();
6
alert(age); //101
7
8
//使用布局变量累加
9
function box(){var age = 100; age++; return age;}
10
alert(box()); //101
11
alert(box()); //101
12
13
//使用匿名函数实现局部变量驻留内存中
14
function box(){
15
var age = 100;
8 collapsed lines
16
return function(){return ++age;};
17
}
18
var b = box();
19
alert(b()); //101
20
alert(b()); //102
21
alert(age); //101
22
b = null;
23
alert(b);

作用域链的机制导致一个问题,在循环中里的匿名函数取得的任何变量都是最后一个值:

1
function box() {
2
var arr = [];
3
for (var i = 0; i < 5; i++) {
4
arr[i] = function () {
5
return i;
6
};
7
}
8
return arr;
9
}
10
11
//alert(box());
12
var b = box();
13
for (var i = 0; i < 5; i++) {alert(b[i]);}
本文标题:匿名函数和闭包
文章作者:Cirry
发布时间:2017-01-05
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode