闭包的实际应用(更新中。。。)

38 篇文章 0 订阅
1 篇文章 0 订阅

1、匿名自执行函数

  我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处,
比如:别的函数可能误用这些变量;造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的)。
除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,
比如UI的初始化,那么我们可以使用闭包:

复制代码
var data= {
table : [],
tree : {}
};

(function(dm){
for(var i = 0; i < dm.table.rows; i++){
var row = dm.table.rows[i];
for(var j = 0; j < row.cells; i++){
drawCell(i, j);
}
}

})(data);
复制代码
我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在函数执行完后会立刻释放资源,关键是不污染全局对象。

2、结果缓存

我们开发中会碰到很多情况,设想我们有一个处理过程很耗时的函数对象,每次调用都会花费很长时间,

3、封装

参考:http://www.2cto.com/kf/201410/342609.html

闭包两个经典例子:

例子1:

function foo(x){
    var tmp = 3;
    function bar(y){
        alert(x+y+(++tmp));
    }
    bar(10);
}

foo(2);            //永远是16
foo(2);            //永远是16
foo(2);            //永远是16

例子2:

function foo(x){
    var tmp = 3;
    return function(y){
        alert(x+y+(++tmp));
    }
}
var bar = foo(2);
bar(10);        //16
bar(10);        //17
bar(10);        //18

可继续参考:
http://kb.cnblogs.com/page/110782/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值