找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索本站精品资源

首页 教程频道 小程序开发 查看内容

【新手入门】javascript新手学习第八课

作者:模板之家 2018-1-24 15:24 1590人关注

何为闭包,所谓闭包就是在一个函数内创建一个新函数,通过这个函数来调用外面的局部变量,主要是为了设计私有的方法和变量,使用闭包会增大内存使用量,使用不当很容易造成内

何为闭包,所谓闭包就是在一个函数内创建一个新函数,通过这个函数来调用外面的局部变量,主要是为了设计私有的方法和变量,使用闭包会增大内存使用量,使用不当很容易造成内存泄露,但是可以避免全局变量的污染
  1. function out() {  
  2.           var a = 1;  
  3.           return function(a){//使用匿名函数实现局部变量驻留内存中,从而实现累加
  4.            return a++;
  5.           };  
  6.         }         
  7.         var fun = out();  
  8.         fun();// 1 执行后 ++a,,然后a还在~  
  9.         fun();// 2   
  10.         fun = null;//a被回收
闭包的变量如果不被收回,那么会一直存在,消耗内存
在如上的例子中,我们会发现,一个函数套用了一个函数,所以我们有时候会看到如下的调用方法 fun()();
如果以上面的代码为例,那么
  1. var fun=out(); 
  2. console.log(fun);    //输出function(){return a++; }; 说明out()=被返回的函数
  3. var fun=out()(); 
  4. console.log(fun);    //输出1,说明out()()=最内部被返回的值
这是因为函数内另一个函数也是作为返回的值而存在,所以我们可以直接通过这样的方法来调用内部返回函数,那么如果是var fun=out()(2);那么返回值是什么呢,如果在全局里定义一个var a=3;
是不感觉到迷惑了,其实这里有个小技巧,当一个变量被返回之后,会被返回给离他最近的一个相同名称的变量. 这句话是我总结的,如果不对,还请指出
私有成员
  1. var out = (function(){     //使用匿名函数
  2.         var a = 1;         //定义私有变量
  3.         function fir(){    //私有函数
  4.               return  a++;
  5.         }
  6.          function sec(){
  7.             return a++;
  8.         }
  9.       return {
  10.                 a:fir,             //使用json结构来储存函数并返回
  11.                 b:sec
  12.         }
  13. })();
  14. out.b();     //2
  15. out.c()      //3


路过

雷人

握手

鲜花

鸡蛋
原作者: 模板之家 来自: 网络收集

全部回复(0)