JavaScript闭包与应用

       Javascript作为脚本语言,与其他语言类似,是有一个作用域的概念存在的,但作为执行脚本,其最大的特点就是具有一个全局作用域,且子作用域可以拿到父作用域的句柄,但这同样也影响了JavaScript的独立性与内聚性,而闭包恰能很好的解决该问题。

       闭包,通俗的描述一下 就是,当函数运行结束后,可以不让其中的局部变量被垃圾回收处理掉,外部程序拿到了持有内部变量句柄的函数后后,仍然可以进一步对其进行操作。

例:

function outerFun (){

      var  innerPara = 0;

       var innerFun = function(){

               innerPara++;

               return innerPara;

        }

       return innerFun;

}

当调用outerFun()函数获得了innerFun函数对象后,内部函数依然可以对属于outerFun的局部变量innerPara进行操作,并且每次的操作结果 并不会 被垃圾回收清空,而 会一直保留上一次 的 操作结果。

第一次调用 返回1,第二次调用返回 2,第三次调用返回3

 

以计数功能为例:

<button id="button1">

<button id="button2">

<button id="button3">

想通过计数器来存储按钮被点击了多少次。

如果使用全局变量,程序会像下面

var count1=0;

var count2=0;

var count3=0;

$(button1).click(function(){

      count1++;

});

$(button2).click(function(){

      count2++;

});

$(button3).click(function(){

      count3++;

});

但 如上的处理,会将按钮1,按钮2,按钮3的点击计数引用,暴露给全局。

使用闭包可以写成如下:

$(button1).click((function(){

var count1 = 0;

return function(){

     count1++;

}

})());

$(button2).click((function(){

var count2 = 0;

return function(){

     count2++;

}

})());

$(button3).click((function(){

var count3 = 0;

return function(){

     count3++;

}

})());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值