zoukankan      html  css  js  c++  java
  • js里的闭包

    一、闭包的特性

      1、函数嵌套函数

      2、函数内部可以引用外部的参数和变量

      3、参数和变量不会被垃圾回收机制回收

    二、闭包的定义及优缺点

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

    自己理解:闭包就是函数里面嵌套函数,里面函数可以访问外面函数的变量(作用域链)

    闭包缺点:常驻内存,增大了内存的使用量,造成内存泄漏

    闭包应用目的:为了设计私有的方法和变量

      

     1         function aaa() {  
     2           var a = 1;  
     3           return function(){   //匿名函数作为返回值传给aaa(),因此执行aaa()就是执行匿名函数
     4            alert(a++)
     5           };  
     6         }         
     7         var fun = aaa();  
     8         fun();// 1 执行后 a++,,然后a还在~  
     9         fun();// 2   
    10         fun = null;//a被回收!!

    由上面的例子可以看出,变量始终保存在内存中,如果不当使用会增大内存损耗

    三、闭包里的this对象

    在闭包里面使用this可能会导致一些问题,this对象是运行时基于函数的执行环境绑定的。如果this在全局范围就是指向window,如果在对象内部就指向这个对象。而闭包却在运行时是指向windowde .

     1         var name ="window";
     2         var person = {    
     3           name : "Leon",    
     4           age:22,    
     5           say:function(){    
     6             return function(){
     7               return this.name;    
     8             }    
     9           }        
    10         }    
    11         console.info(person.say()()); //控制台输出:window

    要想让this不指向window,可以在say()方法里面将this赋值给一个临时变量。

     1         var name ="window";
     2         var person = {    
     3           name : "Leon",    
     4           age:22,    
     5           say:function(){
     6               var _this=this;
     7             return function(){
     8               return _this.name;    
     9             }    
    10           }        
    11         }    
    12         console.info(person.say()()); //控制台输出:Leon
  • 相关阅读:
    HDUOJ---------(1045)Fire Net
    HDUOJ----(1175)连连看
    HDUOJ-----(1072)Nightmare(bfs)
    deque容器的运用一点一点积累
    HDUOJ----(1016)Prime Ring Problem
    HDUOJ----Safecracker(1015)
    hduoj---Tempter of the Bone
    VC6.0设置注释快捷键
    nyoj------------找球号(一)
    set 容器 的全解(转)
  • 原文地址:https://www.cnblogs.com/endlessmy/p/8413750.html
Copyright © 2011-2022 走看看