javascript闭包的作用

闭包的用途

1)缓存:在项目中有些变量的值会在多出用到,如果直接把变量定义成全局变量也能解决问题,但是危险很大,因为可能发生变量重名的问题,这样有可能出现潜在的bug。那么用闭包做一个专门用于存放变量的缓存,就可以解决这个问题。

例子:

//CachedSearchBox就是一个存放变量的工具

var CachedSearchBox = (function(){
   var cache = {};
   count = [];
   return {
    getCache : function(dsid){
     if(dsid in cache) {
      return cache[dsid];
     }
    },
    setCache : function(dsid,data){
     cache[dsid] = data;
    }
   }
  })();
  var a = [1,2,3,4,5];
  CachedSearchBox.setCache('a',a);//可以把变量存放在cache中
  console.info(CachedSearchBox.getCache('a'));//在需要的地方直接拿出来就行

  CachedSearchBox.setCache('a',['a','b','c','d']);
  console.info(CachedSearchBox.getCache('a'));

2)实现封装

闭包的另一个重要用途是实现面向对象中的对象,传统的对象语言都提供类的模板机制,这样不同的对象(类的实例)拥有独立的

成员及状态,互不干涉。虽然JavaScript中没有类这样的机制,但是通过使用闭包,我们可以模拟出这样的机制。

function Person(){

        var name = "default";

        return {

                getName : function(){

                    return name;

                },

                setName : function(newName){

                    name = newName;

                }

        }

};

var john = Person();

console.info(john.getName());

john.setName("john");

console.info(john.getName());

var jack = Person();

console.info(jack.getName());

jack.setName("jack");

console.info(jack.getName());

运行结果如下:

default

john

default

jack

 

 

 

 

 

你可能感兴趣的:(javascript闭包的作用)