js闭包在前端开发中的运用

前端开发js兼容问题|前端开发与thinkphp|ios前端开发论坛

js闭包
闭包:
js的变量有两种 一种是函数外部变量 一种是函数内部变量 例如:

                                      var a =4;
                                      function demo(){
                                             var a = 2;
                                             alert(a);
                                      }
                                      此时浏览器窗口弹出的便是2。

                                      var a = 4;
                                      function demo(){
                                          alert(a);
                                      }
                                      此时浏览器窗口弹出的便是4
                                      但是

                                      function demo(){
                                           var a = 4;
                                      }
                                      alert(a)
                                      此时浏览器窗口还能弹出4吗?

                                      在js里 函数内部可以引用函数外部变量 但是函数外部不能引用函数内部变量 也就是demo()方法里声明的var a =4 在函数外部是无法调用的

                                      PS: function demo(){     和    function demo(){     的区别  没有加var 那么你创建的将是全局变量  而不是函数内部变量
                                              a=4;                                          var a =4;
                                      }                                              }

                                      那么想要调用函数内部变量该怎么做:
                                      function demo(){
                                            var a =4;
                                            function test(){
                                                      alert(a);
                                                  }
                                      }
                                      在方法test中 a 就是等于4的
                                      只有我们把test()作为demo()的返回值 就能获取到内部变量

                                       function demo(){
                                            var a =4;
                                            function test(){
                                                      alert(a);
                                                  }
                                            return test;
                                      }  
                                      var str = demo();
                                      str();
                                      这样浏览器将弹出4   test 就是一个闭包 
                                      可以将闭包理解成是在一个函数中的函数 他的作用就是读取函数内部变量或让这些变量的值始终在内存中
                                      比如:
                                      function demo(){
                                             var a = 1;
                                             ove = function (){                 //首先 这里的ove没有加var申明  也就是说他是一个全局变量 
                                                    a++;                                而他的值是一个匿名的闭包函数 其本身就可以在函数外部调
                                             }                                             用并对函数内部局部变量进行操作
                                             function test(){
                                                      alert(a);
                                             }
                                             return test;
                                      }
                                      var str = demo();
                                      str();//1
                                      ove();
                                      str();//2
                                      test是一个闭包函数 str运行了两次 第二次为2 也就是demo()内部变量 a=1 一直在内存中没有被清除
                                      原因是 test()被赋值给了一个全局变量 而demo()是test()的父函数 由于test()被赋值给全局变量一直存
                                      在于内存中 test有是存在于demo()中 所以demo()也一直存在于内存中 进而 a的值被保存在内存里

 

macbook做前端开发|web前端js开发|前端开发还是javascript

» 本文来自:前端开发者 » 《js闭包在前端开发中的运用》
» 本文链接地址:https://www.rokub.com/4027.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!