js中的闭包概念常常让学习js的新人烦恼不已,但是即使不知道闭包为何物的js新手一样在不知不觉中使用这个概念。

简单的说就是js的function被定义的时候,所有“能看到的对象”,这个function内部都是可见的,可以访问的。

举例而言:

var globelvar = {};

function function1(){

   var localvar1;

   function function2(){

       var localvar2;

       function function3(){

           var localvar3;

           

       }

       globelvar.function3 = function3;

   }

   function2();

   globelvar.function2 = function2;

}

function1();


function function4(){

   var localvar4;

}

变量 globelvar 四个方法都可以访问到。

变量 localvar1 可以被 function1 function2 function3 三个方法访问到,function4无法访问。

变量 localvar2 可以被 function2 function3 访问到,function1 function4无法访问。

变量 localvar3 只可以被function3访问到。

变量 localvar4 值可以被function4访问到。


这种变量的可见性可以概括为方法定义的时候,在方法的位置能"看到"的变量,这个方法都是可以访问的。


这种可见性就是闭包。


闭包的现象和概念看上去就这么简单。