先来定义,能读取其它函数内部变量的函数,它可以将函数内部和外部连接起来。
javascript有二种变量的作用域,
一是全局变量,二是局部变量
根据javascript语言的特性,一个函数可以访问函数外的全局变量,但函数外的其它函数,却无法访问此函数内部的局域变量。
例如:
var abc = 123;
function n1(){
console.log(abc)
}
n1();
//123
但如果这样写:
function n2(){
var abc=456;
}
console.log(abc);
//error
但有的时候,就是需要在函数外面,获取函数的内部变量,就这样写:
function n3(){
var a1 = '123';
function n4(){
console.log(a1);
//123
}
}
或直接点这样写:
function n5(){
var a2 = '555';
return function(){
console.log(a2)
}()
}
n5();
//555
上面例子中的n4函数就是闭包。
闭包这二个字本身就难以理解,各种书上对它的解释也是各种看不懂。
我建议还是要理解它,而不是读懂各种书上对它的定义。
SO,
n4函数能读到它的,,,父函数吧,就这个意思,的局域变量,
那这个n4()就是闭包。。
return的匿名自执行函数,能够读到它的父函数n5的局域变量,那这个return r 匿名自执行函数,就是闭包。。
--------------
好啦,闭包讲完了,看看表,5分钟到了吗?
闭包有哪些用处呢?
它的用处可大了,下次再说,,困了,晚安