js匿名函数自执行的好处
程序员文章站
2022-06-24 09:36:38
我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。 因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。 下面我们来看一个案例: 上面这个案例里的变量num就是一个典型的全局变量。 那么我们要怎么把nu ......
我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。
因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。
下面我们来看一个案例:
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
上面这个案例里的变量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
上面这种方法虽然解决了全局变量的问题,但是多次定义相同变量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 13 demo(); //调用函数demo,获得函数a、函数b、变量num 14 a(); //调用函数a,结果会在控制台打印1 15 b(); //调用函数b,结果会在控制台打印1
上面这种方法二将num、函数a、函数b都写在一个demo函数里,这样就将变量num变成了一个局部变量,而且函数a和函数b也都可以访问到变量num
但是,这种方法也有弊端。
- 如果函数demo不执行,就无法获取函数a、函数b、变量num。
- demo也是一个全局变量。也就是说我们虽然没有定义全局变量num,却又定义了一个全局变量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 })();
匿名函数自执行没有定义任何一个全局变量,我们也不用每次先调用外面的函数获取里面的内容。完美的解决了我们的需求。极力推荐。
写在后面:
什么是匿名函数?什么是函数自执行?匿名函数还有其他好的应用?或许我的其他博客https://www.cnblogs.com/curryli/ 可以帮到你哦,欢迎您的到来。
下一篇: P1358 扑克牌