代码改变世界

JavaScript笔记 第十六章 匿名函数和闭包

  xchit  阅读(262)  评论(0)    收藏  举报

1.匿名函数

2.闭包

  匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。

一、匿名函数

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
//普通函数
function getName() {
    return 'name';
}
alert(getName());
 
//匿名函数
function () {               //单独的匿名函数,是无法运行的
    return 'name';          //就算能运行,也无法调用,因为没有名称
}
 
//把匿名函数赋值给变量
var getName= function () {
    return 'name';
};
 
//通过自我执行来执行匿名函数
(function () {                  //(匿名函数)(); 第一圆括号放匿名函数,第二个圆括号执行
    alert('name');
})();
 
 
(function () {
    alert('name');
})();
 
 
//把匿名函数自我执行的返回值赋给变量
var getName= (function () {
    return 'name';
})();
 
alert(getName);

  

二、闭包

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

1
2
3
4
5
6
7
8
9
//通过闭包返回局部变量
function getAge() {
    var age= 100;
    return function () {
        return age;
    };
}
 
alert(getAge()());

 使用闭包有一个优点, 也是它的缺点: 就是可以把局部变量驻留在内存中, 可以避免使 用全局变量。(全局变量污染导致应用程序不可预测性,每个模块都可调用必将引来灾难, 所以推荐使用私有的,封装的局部变量)。

  

1
2
3
4
5
6
7
8
//使用匿名函数实现局部变量驻留内存中从而累加
function getAge() {
    var age = 100;
    return function () {
        age++;
        return age;
    };
}

PS:由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更 多的内存。过度使用闭包会导致性能下降,建议在非常有必要的时候才使用闭

包。

点击右上角即可分享
微信分享提示