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);

  }

};

原文地址:https://www.cnblogs.com/null2/p/3560275.html