JavaScript 闭包

一、闭包是一种特殊的对象,有两部分组成:函数+创建该函数的上下文环境(环境由闭包创建时在作用域中的任何局部变量)

二、可以使用函数与闭包来构造模块,模块模式(module pattern)一般形式为:

  1)一个定义了私有变量和函数的函数; 2)利用闭包创建可以访问私有变量和函数的特权函数; 3)返回这个特权函数;

三、闭合的一个常见错误:在循环中创建函数。

var serial_maker=function(){

   //返回一个用来产生唯一字符串的对象。

     //唯一字符串由两部分组成:前缀+序列号。

     //该对象包含一个设置前缀方法,一个设置序列号的方法,一个产生唯一字符串的方法。

  var prefix='';

  var seq=0;

  return {

    set_prefix:function(p){prefix=String(p);},

    set_seq:function(s){seq=s;},

    gensym:function(){

      var result=prefix+seq;

      seq+=1;

      return result;

 

    }

  }

};

var seqer=serial_marker();

seqer.set_prefix('Q');

seqer.set_seq(1000);

var unique=seqer.gensym();  //unique='Q1000'

 

-------------------------------------------------------------

//错误的例子:

var add_the_handlers=function(nodes){

  var i;

  for(i=0;i<nodes.length;i++){

    nodes[i].onclick=function(e){alert(i);}

  }

}

 

//改良后的例子:

var add_the_handlers=function(nodes){

  var helper=function(i){

    return function(){

      alert(i);

    }

  };

  var i;

  for(i=0;i<nodes.length;i++){

    nodes[i].onclick=helper(i);

  }

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-02-21 23:19  chenyizh  阅读(147)  评论(0编辑  收藏  举报