js匿名函数自执行的好处

更新日期: 2019-10-07阅读: 1.4k标签: 匿名函数

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

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

下面我们来看一个案例:

var num = 1;//全局变量num

function a() {
    console.log(num);     
}

function b() {
    console.log(num);
}

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

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

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

 

方法一:

function a() {
  var num = 1;
  console.log(num);//打印1
}

function b() {
  var num = 1;
  console.log(num);
}

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

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

 

方法二:

var demo = function() {
  var num = 1;
            
  function a() {
    console.log(num);     
  }

  function b() {
    console.log(num);
  }
}

demo(); //调用函数demo,获得函数a、函数b、变量num
a();  //调用函数a,结果会在控制台打印1
b();  //调用函数b,结果会在控制台打印1

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

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

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

所以,这种也不推荐。

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


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

(function () {
  var num = 1;

  function a() {
    console.log(num);
  }

  function b() {
    console.log(num);
  }
            
  a();
  b();
})();

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

链接: https://www.fly63.com/article/detial/5867

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!