闭包函数:闭包简单理解成"定义在一个函数内部的函数"。
下面是一个标准的闭包函数,内部定义的函数可以读取外部函数中定义的变量 ,闭包函数须是在内部定义的函数,而不是在外部定义的。
var test = 10; var f = (function (){ var test = 20; return function (){ alert("访问---"+test);//20
} })(); f();
变形1:
返回一个外部定义的函数,并执行这个外部函数foo
var test = 10; var f = (function (){ var test = 20; return foo; //10 })(); f(); function foo(){ alert('foo1:'+test); //10 }
变形2:
这个其实已经不是一个闭包,仅仅是一个函数调用,在自执行的函数里,调用了另一个函数foo,而foo是在外部定义的,是无法读取到内部函数里定义的局部变量的,所以,foo()调用时,读取的是外部定义的全局变量10
var test = 10; (function (){ var test = 20; foo(); //10 })(); function foo(){ alert('foo1:'+test); //10 }