闭包

闭包,百度的解释为“闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)”。

闭包是JavaScript学习者的成年礼,没理解闭包就不能说自己学会了JavaScript。闭包在编程中用的比较多,有时候自己在想,为什么需要闭包,闭包又是怎么产生的。

在JavaScript中函数是一等公民,函数的返回对象可以是简单类型也可以是函数,简单类型对外部依赖最少,但是函数除了定义函数内的变量以及逻辑操作还包含外部环境变量(上下文),为了使返回的函数是一个完整的功能块,势必要求函数所依赖的外部环境也一同提供。返回函数的外部依赖像是必须的配套支持,缺少外部依赖的函数是不完整的,也就无法提供正常的函数功能。由于函数每次运行都要进行一次完整全新的资源分配,因此返回的各闭包函数都拥有自己完整独立的一套外部环境(上下文),对外表象好像是类的不同实例,实例都拥有自己的私有变量。

 var F=function(){
     var i=0;
     return {
         add:function(){
             i++;
         },
         display:function(){
             console.log(i);
         }
     }
 }

测试如下:

 var f1=F();
 f1.add();
 f1.add();
 f1.display();//2
 var f2=F()
 f2.add();
 f2.display();//1

由此测试可看出f1,f2拥有各自的i变量。

posted @ 2017-07-13 11:27  朱现国  阅读(143)  评论(0编辑  收藏  举报