js 闭包理解

闭包主要应用于两种情况:

1 函数作为返回值。

2 函数作为参数传递。

第一种举例:

function fn(){

 var max = 10;

 return function bar(){

   if(x > max){

    console.log(x);

   }

 };

}

var f1=fn();

f1(15);

如上,bar函数作为返回值,赋值给f1。执行f1(15)时,用到了fn作用域下面的max变量的值,然后跨作用域取值。

 

var max=10;

   fn=function (x){

    if(x>max){

     console.log(x);

   }

};

(function(f){

   var max=100;

   f(15);

})(fn);

如上,fn函数作为参数被传递到另一个函数,赋值给f参数,max变量取值为10,不是100。

例3:

function fn(){

 var max=0;

 return function bar(x){

   if(x>max){

     console.log(x);

  }

 };

}

var f1=fn();

  max=100;

f1(15);

在执行到fn()上下文环境后,由于后面执行bar()上下文环境时候需要调用到fn()里面的max,因此,fn()上下文环境并没有马上销毁,而是在bar()执行完成后再销毁。

posted @ 2016-10-24 10:43  catherinehd  阅读(116)  评论(0编辑  收藏  举报