欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript匿名函數(shù)之模仿塊級作用域

 更新時(shí)間:2015年12月12日 09:28:24   作者:tianxintian22  
這篇文章主要介紹了JavaScript匿名函數(shù)之模仿塊級作用域的相關(guān)資料,需要的朋友可以參考下

匿名函數(shù)

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

匿名函數(shù):就是沒有函數(shù)名的函數(shù)。

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

第一種:這也是最常規(guī)的一種

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

 第二種:這種方法使用了Function構(gòu)造函數(shù),把參數(shù)列表和函數(shù)體都作為字符串,很不方便,不建議使用。

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

 第三種:

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

 注意“=”右邊的函數(shù)就是一個(gè)匿名函數(shù),創(chuàng)造完畢函數(shù)后,又將該函數(shù)賦給了變量square。

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

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

該函數(shù)在java、C#等語言中,變量i只會在for循環(huán)語句中有定義,循環(huán)結(jié)束,i也就被銷毀了。但在JavaScript中,變量i是定義在outputNumber()活動對象中的,因此在它定義開始,就可以在函數(shù)內(nèi)部訪問它。即使重新聲明同一個(gè)變量,也不會改變它的值。

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

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

(function(){ 
   //這是塊級作用域 
})() 

以上代碼定義變調(diào)用了一個(gè)匿名函數(shù),將函數(shù)聲明包含在一個(gè)小括號里面,表示它是個(gè)函數(shù)表達(dá)式。緊跟其后的另一對小括號會立即調(diào)用這個(gè)函數(shù)。
無論什么時(shí)候,只要臨時(shí)需要一些變量,就可以用私用作用域,例如:

function outputNumber(count){ 
  (function(){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  })(); 
  alert(i);  //導(dǎo)致一個(gè)錯(cuò)誤 
} 

這樣,我們在for循環(huán)外部插入了一個(gè)私有作用域。在匿名函數(shù)中定義的任何變量,都會在執(zhí)行結(jié)束時(shí)被銷毀。

這種技術(shù)經(jīng)常在全局作用域中被用在函數(shù)外部,從而限制向全局作用域中添加過多的變量和函數(shù)。

一般來說,我們應(yīng)該盡量減少向全局作用域中添加變量和函數(shù)。

這種做法可以減少閉包占用內(nèi)存的問題,因?yàn)闆]有指向匿名函數(shù)的引用,只要函數(shù)執(zhí)行完畢,就可以立即銷毀其作用域鏈。

相關(guān)文章

最新評論