关于闭包

正常情况下外部变量是不能访问一个函数的内部变量的 例如:

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

  

 

posted @ 2017-08-23 15:39  月月木有小情绪  阅读(120)  评论(0编辑  收藏  举报