首頁  >  文章  >  web前端  >  JavaScript匿名函數之模仿區塊級作用域_javascript技巧

JavaScript匿名函數之模仿區塊級作用域_javascript技巧

WBOY
WBOY原創
2016-05-16 15:26:121574瀏覽

匿名函數

函數是JavaScript中最靈活的一種對象,這裡只是講解其匿名函數的用途。

匿名函數:就是沒有函數名稱的函數。

函數的定義,先簡單介紹一下函數的定義,大致可分為三種方式

第一種:這也是最常規的一種

function double(x){
  return 2 * x;  
}

 第二種:這個方法使用了Function建構函數,把參數列表和函數體都當作字串,很不方便,不建議使用。

var double = new Function('x', 'return 2 * x;');

 第三種:

var double = function(x) { return 2* x; }

 注意「=」右邊的函數就是一個匿名函數,創造完畢函數後,又將該函數賦給了變數square。

JavaScript中是沒有區塊級作用域概念的。也就是說,在區塊級語句中定義的變量,實際上是在包含函數中(外部函數)而非語句中創建的。

function outputNumber(count){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  } 
  alert(i);  //count 
} 

函數在java、C#等語言中,變數i只會在for迴圈語句中有定義,循環結束,i也就被銷毀了。但在JavaScript中,變數i是定義在outputNumber()活動物件中的,因此在它定義開始,就可以在函數內部存取它。即使重新聲明同一個變量,也不會改變它的值。

function outputNumber(count){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  } 
  var i;   //重新声明变量 
  alert(i);  //count 
} 

匿名函數可以用來模仿區塊級作用域並避免這個問題,用作區塊級作用域(也稱私有作用域)的匿名函數的語法如下:

(function(){ 
   //这是块级作用域 
})() 

以上程式碼定義變呼叫了一個匿名函數,將函數宣告包含在一個小括號裡面,表示它是個函數表達式。緊接在後的另一對小括號會立即呼叫這個函數。
無論什麼時候,只要臨時需要一些變量,就可以用私人作用域,例如:

function outputNumber(count){ 
  (function(){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  })(); 
  alert(i);  //导致一个错误 
} 

這樣,我們在for迴圈外部插入了一個私有作用域。在匿名函數中定義的任何變量,都會在執行結束時被銷毀。

這種技術經常在全域作用域中被用在函數外部,從而限制在全域作用域中添加過多的變數和函數。

一般來說,我們應該盡量減少在全域作用域中加入變數和函數。

這種做法可以減少閉包佔用記憶體的問題,因為沒有指向匿名函數的引用,只要函數執行完畢,就可以立即銷毀其作用域鏈。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn