闭包!!!

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

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 } }