一、闭包是一种特殊的对象,有两部分组成:函数+创建该函数的上下文环境(环境由闭包创建时在作用域中的任何局部变量)
二、可以使用函数与闭包来构造模块,模块模式(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);
}
};