1. 程式人生 > 實用技巧 >js匿名函式自執行的好處

js匿名函式自執行的好處

我們知道,在建立一個函式時如果要用到變數來存取資訊的話,要儘量使用區域性變數。

因為一方面區域性變數會隨著函式的執行結束被銷燬;另一方面在不執行函式的時候也不會建立這個區域性變數,對節省空間資源有很大的好處。

下面我們來看一個案例:

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了怎麼辦呢?

所以,這種也不推薦。

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

廣州品牌設計公司https://www.houdianzi.com

PPT模板下載大全https://redbox.wode007.com

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

(function () {
  var num = 1;

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

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

匿名函式自執行沒有定義任何一個全域性變數,我們也不用每次先呼叫外面的函式獲取裡面的內容。完美的解決了我們的需求。極力推薦。