js匿名函数自执行的好处_冘醉_前端开发者

我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。

我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。

因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。

因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。

下面我们来看一个案例:

下面我们来看一个案例:

 1 var num = 1;          //全局变量num
 2 
 3 function a() {
 4     console.log(num);     
 5 }
 6 
 7 function b() {
 8     console.log(num);
 9 }
10 
11 a();              //调用函数a,结果会在控制台打印1
12 b();              //调用函数b,结果会在控制台打印1
 1 var num = 1;          //全局变量num
 2 
 3 function a() {
 4     console.log(num);     
 5 }
 6 
 7 function b() {
 8     console.log(num);
 9 }
10 
11 a();              //调用函数a,结果会在控制台打印1
12 b();              //调用函数b,结果会在控制台打印1

1 var num = 1;          //全局变量num
2
3 function a() {
4 console.log(num);
5 }
6
7 function b() {
8 console.log(num);
9 }
10
11 a();              //调用函数a,结果会在控制台打印1
12 b();              //调用函数b,结果会在控制台打印1
1var//全局变量num 2 3function a() {
4 console.log(num);
5}
6 7function b() {
8 console.log(num);
9}
1011//调用函数a,结果会在控制台打印112//调用函数b,结果会在控制台打印1

上面这个案例里的变量num就是一个典型的全局变量。

上面这个案例里的变量num就是一个典型的全局变量。

那么我们要怎么把num变成局部变量呢?

那么我们要怎么把num变成局部变量呢?

 

方法一:

方法一:

 1 function a() {
 2   var num = 1;
 3   console.log(num);     //打印1
 4 }
 5 
 6 function b() {
 7   var num = 1;
 8   console.log(num);
 9 }
10 
11 a();                 //调用函数a,结果会在控制台打印1
12 b();                 //调用函数b,结果会在控制台打印1
 1 function a() {
 2   var num = 1;
 3   console.log(num);     //打印1
 4 }
 5 
 6 function b() {
 7   var num = 1;
 8   console.log(num);
 9 }
10 
11 a();                 //调用函数a,结果会在控制台打印1
12 b();                 //调用函数b,结果会在控制台打印1

1 function a() {
2   var num = 1;
3   console.log(num); //打印1
4 }
5
6 function b() {
7   var num = 1;
8   console.log(num);
9 }
10
11 a(); //调用函数a,结果会在控制台打印1
12 b(); //调用函数b,结果会在控制台打印1
1 function a() {
2   var;
3   //打印1 4 }
5 6 function b() {
7   var;
8   console.log(num);
9 }
1011 //调用函数a,结果会在控制台打印112 //调用函数b,结果会在控制台打印1

上面这种方法虽然解决了全局变量的问题,但是多次定义相同变量num。使得代码冗余,不够优化。这种方法不推荐

上面这种方法虽然解决了全局变量的问题,但是多次定义相同变量num。使得代码冗余,不够优化。这种方法不推荐

 

方法二:

方法二:

 

 1 var demo = function () {
 2     var num = 1;
 3 
 4     function a() {
 5         console.log(num);
 6     }
 7 
 8     function b() {
 9         console.log(num);
10     }
11 
12     a();             //调用函数a,结果会在控制台打印1
13     b();             //调用函数b,结果会在控制台打印1
14 }
15 
16 demo();              //调用函数demo,获得函数a、函数b、变量num
 1 var demo = function () {
 2     var num = 1;
 3 
 4     function a() {
 5         console.log(num);
 6     }
 7 
 8     function b() {
 9         console.log(num);
10     }
11 
12     a();             //调用函数a,结果会在控制台打印1
13     b();             //调用函数b,结果会在控制台打印1
14 }
15 
16 demo();              //调用函数demo,获得函数a、函数b、变量num

1 var demo = function () {
2 var num = 1;
3
4 function a() {
5 console.log(num);
6 }
7
8 function b() {
9 console.log(num);
10 }
11
12 a(); //调用函数a,结果会在控制台打印1
13 b(); //调用函数b,结果会在控制台打印1
14 }
15
16 demo(); //调用函数demo,获得函数a、函数b、变量num
1varfunction () {
2var;
3 4function a() {
5 console.log(num);
6 }
7 8function b() {
9 console.log(num);
10 }
1112//调用函数a,结果会在控制台打印113//调用函数b,结果会在控制台打印114}
1516//调用函数demo,获得函数a、函数b、变量num

 

 

 

 

上面这种方法二将num、函数a、函数b都写在一个demo函数里,这样就将变量num变成了一个局部变量,而且函数a和函数b也都可以访问到变量num

上面这种方法二将num、函数a、函数b都写在一个demo函数里,这样就将变量num变成了一个局部变量,而且函数a和函数b也都可以访问到变量num

但是,这种方法也有弊端。

但是,这种方法也有弊端。

  1. 如果函数demo不执行,就无法获取函数a、函数b、变量num。
  2. demo也是一个全局变量。也就是说我们虽然没有定义全局变量num,却又定义了一个全局变量demo。显然这并没有达到我们最初的目的。
  3. 每次调用函数a和函数b之前都得先调用demo,这样会使代码冗余。万一我们哪次忘记调用demo了怎么办呢?
  • 如果函数demo不执行,就无法获取函数a、函数b、变量num。
  • 如果函数demo不执行,就无法获取函数a、函数b、变量num。

  • demo也是一个全局变量。也就是说我们虽然没有定义全局变量num,却又定义了一个全局变量demo。显然这并没有达到我们最初的目的。
  • demo也是一个全局变量。也就是说我们虽然没有定义全局变量num,却又定义了一个全局变量demo。显然这并没有达到我们最初的目的。

  • 每次调用函数a和函数b之前都得先调用demo,这样会使代码冗余。万一我们哪次忘记调用demo了怎么办呢?
  • 每次调用函数a和函数b之前都得先调用demo,这样会使代码冗余。万一我们哪次忘记调用demo了怎么办呢?

    所以,这种也不推荐。

    所以,这种也不推荐。

     

    那我们该怎么办呢?==>匿名函数自执行

    那我们该怎么办呢?==>匿名函数自执行

    方法三:匿名函数自执行(推荐)

    方法三:匿名函数自执行(推荐)匿名函数自执行(推荐)匿名函数自执行(推荐)

     1 (function () {
     2   var num = 1;
     3 
     4   function a() {
     5     console.log(num);
     6   }
     7 
     8   function b() {
     9     console.log(num);
    10   }
    11             
    12   a();
    13   b();
    14 })();
     1 (function () {
     2   var num = 1;
     3 
     4   function a() {
     5     console.log(num);
     6   }
     7 
     8   function b() {
     9     console.log(num);
    10   }
    11             
    12   a();
    13   b();
    14 })();

    1 (function () {
    2   var num = 1;
    3
    4   function a() {
    5     console.log(num);
    6   }
    7
    8   function b() {
    9     console.log(num);
    10   }
    11
    12   a();
    13   b();
    14 })();
    function () {
    var;
    function a() {
        console.log(num);
      }
    function b() {
        console.log(num);
      }
      a();
      b();

    匿名函数自执行没有定义任何一个全局变量,我们也不用每次先调用外面的函数获取里面的内容。完美的解决了我们的需求。极力推荐。

    匿名函数自执行没有定义任何一个全局变量,我们也不用每次先调用外面的函数获取里面的内容。完美的解决了我们的需求。极力推荐。

    写在后面:

    写在后面:写在后面:

    什么是匿名函数?什么是函数自执行?匿名函数还有其他好的应用?或许我的其他博客https://www.cnblogs.com/CurryLi/ 可以帮到你哦,欢迎您的到来。

    什么是匿名函数?什么是函数自执行?匿名函数还有其他好的应用?或许我的其他博客https://www.cnblogs.com/CurryLi/ 可以帮到你哦,欢迎您的到来。https://www.cnblogs.com/CurryLi/

    //调用函数a,结果会在控制台打印1

    //调用函数a,结果会在控制台打印1//调用函数a,结果会在控制台打印1

    » 本文来自:前端开发者 » 《js匿名函数自执行的好处_冘醉_前端开发者》
    » 本文链接地址:https://www.rokub.com/73606.html
    » 您也可以订阅本站:https://www.rokub.com
    赞(0)
    64K

    评论 抢沙发

    评论前必须登录!