闭包!!!

刚接触到这个词,晕忽了许久。

1.闭包是在其词法上下文中引用了自由变量的函数。
2.如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被定义为闭包。
3.在实现深约束时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。

闭包!是不越看越晕啊,还不如直接用代码来说明:

例子1,创造一个函数。该函数内部的x是无法外部访问的。

var myfunc=function(){
var x=0;
return function(){
return x;
}
};

例子2:创造一个方法。

var addx=function(x) {
return function(y) {return x+y;};
}

a=addx(8); //先定义x
alert(a(10));//运算8+10

结果:18

例子3,创造一个对象。x同样是无法外部访问的。注意最后一行的(),作用是马上调用构造出来的函数。

var myobj=function(){
var x=0;
return {
fun1:function(){alert(x+1);},
fun2:function(){alert(x+1);}
};
}();

例子4:利用闭包给attachEvent侦听函数增加参数

dom节点.attachEvent(”onclick”,onclickfun(arg1,arg2));

var onclickfun=function(arg1,arg2){
return function(){
alert(arg1);
alert(arg2); //代码块,arg1,arg2
}
}

Tags:

Leave a Reply