正常情况下外部变量是不能访问一个函数的内部变量的 例如:
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