【JavaScript】匿名函数和闭包

一、匿名函数

         就是没有名字的函数

 

        如何表示:

 

         1、(function( ){                           //封装成表达式,自我执行

                  alert'Lee';  

          })();                             //()表示执行函数,并且传参

  

         2 赋值给变量

             var box =function()  {           

                   return 'Lee';

            };

            alert(box());

       

         3、函数里的匿名函数

               function  box(){

                      returnfunction(){                            //函数里的匿名函数,产生闭包

                               return   'Lee';

                      }

               }

            alert(box()());                                            //调用匿名函数  

 

 

模仿块级作用域:

 

         因为在JavaScript中没有块级作用域的概念,出了if(){}   for(){}范围,

变量不会被销毁,就算重新声明同一个变量也不会改变他的值,所以用

匿名函数来构造一个块级作用域,使得里面的变量能够出了范围后自动销毁。

         优点:

         减少闭包占用的内存问题

 

      function(){

                        //这里是块级作用域

            })();  

 

          举例:

                 function box(count){

                         (function(){

                                   for(var  i=0;i<count;i++){}

                        })();

                  alert(i);                     //报错,无法访问

               }

                box(2);

 

 

   二、闭包

 

           是指有权访问另一个函数作用域中的变量的函数。

 

           创建闭包:

          

           在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量

 

          function box(){                      

                   var user='Lee';

                   returnfunction(){                    //通过匿名函数返回box()局部变量

                              return user;

                   };

          }

         alert(box()());                                      //通过box()()来直接调用匿名函数返回值

  

         var b=box();                         

         alert(b());                                             //另一种调用匿名函数返回值

    

         优点:

               也就是他的缺点,就是可以把局部变量驻留在内存中,可以避免使用全局变量。

          比如:

          通过闭包可以实现局部变量的累加:

         function  box(){

                   var age=100;

                   return function(){

                           age++;

                           return age;

                     }

            }

 

         var b=box();                      //获得函数

         alert(b());                           //调用匿名函数

         alert(b());                          //第二次调用匿名函数,实现累加

 

          闭包里作用域返回的局部变量资源不会被立刻销毁收回,所以可能会占用更多的内存,过度使用闭包会导致性能下降,建议在非常有必要的时候才使用闭包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值