正常情况下外部变量是不能访问一个函数的内部变量的 例如:
function foo(){
var a=122
}
console.log(a)
结果:报错 a is not defined
那如何访问一个函数的内部变量呢?先看看下边两种:
function foo(){
var a=111;
function bar(){
console.log(a)
}
bar()
}
foo()
打印:111
function foo(){
var a=111;
return function bar(){
console.log(a)
}
}
var result=foo();
result()
打印:111
上述代码中第二种函数bar就是闭包。
关于闭包的用途
闭包除了读取函数内部的变量外,还可以将变量的值一直保存在内存中;
例如:
function f1(){
var n=999;
function f2(){
alert(n+=1);
}
return f2;
}
var s=f1();
s();//1000
s();//1001
还有几个关于闭包的经典面试题
for (var i = 1; i <= 5; i++) {
(function(i){
setTimeout( function timer() {
console.log(i);
}, 10000 );
})(i);
}
打印12345