js闭包的理解

闭包在js开发中会经常被使用到。那么,什么是闭包?

一个官方的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式。换句话说,JavaScript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

function wrap(){
  var value="something";
  function closure(){
     alert(value);
   }
  return closure;
}
wrapp();
闭包有什么用呢?

1.模拟面向对象的代码风格,实现封装

function Person(){    
    var name = "name";       
    return {      
       getName : function(){    
           return name;    
       },    
       setName : function(newName){    
           name = newName;    
       }    
    }    
}; 

 2. 缓存数据

引用JavaScript单例模式的写法

var single = (function(){
    var unique;

    function getInstance(){
        if( unique === undefined ){
            unique = new Construct();
        }
        return unique;
    }

    function Construct(){
        // ... 生成单例的构造函数的代码
    }

    return {
        getInstance : getInstance
    }
})();

这里缓存了对象unique,实现了下一次调用时使用的对象就是unique这个对象。我们经常使用的在for循环的场景下存储变量下表的应用也是基于缓存实现。

闭包的坏处是什么呢?

闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

http://www.cnblogs.com/carekee/articles/1733847.html

小弟刚入行,欢迎各位拍砖。



posted on 2015-07-11 09:32  'Fei..;  阅读(131)  评论(0)    收藏  举报

导航