对于一个个刚刚接触前端的新手,天天听人讲闭包,听的那个高大尚,心中对各位技术大佬是那个的膜拜,于是做为前端菜鸟的我,就去了解了传说中的闭包。

何为闭包?
通俗易懂的讲,就是可以调用函数内部的变量和方法

举例说明如下:

     function test(){
           var x = 1;
           var y = 2;
           function func1(){
               x++;
               console.log("x:"+x);
           }

           function func2(){
               y++;
               console.log("y:"+y);
           }

            func3 = function(){
               console.log("x+y:"+(x+y));
           }

           return {
               func1:func1
           }
       }

       var obj1 = test();
       obj1.func1();//输出x:2
       obj1.func1();//输出x:3
       func3();//输出x+y:5

       var obj2 = test();
       obj2.func1();//输出x:2
       obj2.func1();//输出x:3
       obj2.func1();//输出x:4
       func3();//输出x+y:6

       obj1.func1();//输出x:4
       func3();//输出x+y:6

解析:你可以把test理解成一个对象,首先建立一个obj1对象,这个时候调用obj1.func1()时,test中的x会被累加,这个就是闭包的一个特点,就是外部可以改变函数内部的变量值,这里要记住一点,只有在test中return返回的函数在外部才能被调用,如果此时调用obj1.func2()会提示出错的,只有跟func1一样在return中返回才能被外部调用;func3可以理解为公有的函数,但是只有在声明完test之后才能被调用,因为func3第一次定义是在test中定义的,所有要先test()之后才能被调用;obj2是新建立的一个对象,此时的obj1和obj2两个对象是互不干扰的,各自叠加,这也是闭包的一个特性,可以用在以后建立多个计时器时使用闭包,事半功倍;这里要特别强调一下func3这个函数,第一个func3调用的是对象obj1中的func3,而当obj2新对象声明之后,func3调用的就是obj2中的func3了


hope93
469 声望18 粉丝

世上无难事,只要肯放弃。。。