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

上面這個案例里的變量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     a();             //調用函數a,結果會在控制台打印1
13     b();             //調用函數b,結果會在控制台打印1
14 } 15 
16 demo();              //調用函數demo,獲得函數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了怎么辦呢?

所以,這種也不推薦。

 

那我們該怎么辦呢?==>匿名函數自執行

方法三:匿名函數自執行(推薦)

 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/ 可以幫到你哦,歡迎您的到來。

//調用函數a,結果會在控制台打印1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM