萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> js中匿名函數的創建與調用方法

js中匿名函數的創建與調用方法

   function 函數名(參數列表){函數體;}

  如果是創建匿名函數,那就應該是:

  function(){函數體;}

  因為是匿名函數,所以一般也不會有參數傳給他。

  為什麼要創建匿名函數呢?在什麼情況下會使用到匿名函數。匿名函數主要有兩種常用的場景,一是回調函數,二是直接執行函數。

  回調函數,像ajax的異步操作,就需要回調函數。這裡就不詳解。關於直接執行函數,我看一個例子就明白了:

代碼如下  

<script language="javascript">

var a = "a";

(function(){
var a="b";
alert(a);
})();

alert(a);

</script>

  在上面這段代碼中,會順序輸出兩個alert框。第一個alert框內容為b,第二個為a。大家看到什麼好處了嗎?對的,使用函數直接執行可以限定變量的作用域,使不同腳本的相同變量可以得以共存。

  下面,我們先初步了解一下和匿名函數相關的概念。

  函數聲明(function 語句),要使用一個函數,我們就得首先聲明它的存在。而我們最常用的方式就是使用function 語句來定義一個函數,如:

代碼如下  

function abc(){
// code to process
}
function abc(){ // code to process }

  當然,你的函數也可以是帶參數的,甚至是帶返回值的。

代碼如下   view plaincopy to clipboardprint?
function abc(x,y){
return x+y;
}
function abc(x,y){ return x+y; }

  但是,無論你怎麼去定義你的函數,JS 解釋器都會把它翻譯成一個Function 對象。例如,你在定義上面的其中一個例子的函數號,再輸入如下代碼:

  alert(typeof abc);// "function"

  你的浏覽器就會彈出提示框,提示你abc 是一個Function 對象。那麼Function 對象究竟是什麼呢?

  Function 對象

  Function 對象是JavaScript 裡面的固有對象,所有的函數實際上都是一個Function 對象。關於這個方面的討論,我們留到下一個專題節。我們先看看,Function 對象能不能直接運用構造函數創建一個新的函數呢?答案是肯定的。例如:

代碼如下  

var abc = new Function("x","y","return x*y;");
alert(abc(2,3)); // "6"

  相信大家現在對如何聲明一個函數應該是有所了解了。那麼什麼才是匿名函數呢?

  聲明匿名函數

  顧名思義,匿名函數就是沒有實際名字的函數。例如,我們把上面的例子中,函數的名字去掉,再判斷一下他是不是一個函數:

代碼如下   alert(typeof function(){});// "function"
alert(typeof function(x,y){return x+y;});// "function"
alert(typeof new Function("x","y","return x*y;"))// "function"
alert(typeof function(){});// "function"
alert(typeof function(x,y){return x+y;});// "function"
alert(typeof new Function("x","y","return x*y;"))// "function"

  我們可以很容易地看到,它們全都是Function 對象,換言之,他們都是函數,但是他們都有一個特點—— 沒有名字。所以我們把他們稱作“ 匿名函數” 。然而,正因為他們沒有“ 名字” ,我們也沒有辦法找到他們。這就引申了如何去調用一個匿名函數的問題了。

  匿名函數的調用

  要調用一個函數,我們必須要有方法定位它,引用它。所以,我們會需要幫它找一個名字。例如:

代碼如下  

var abc=function(x,y){
return x+y;
}
alert(abc(2,3)); // "5"

  上面的操作其實就等於換個方式去定義函數,這種用法是我們比較頻繁遇到的。例如我們在設定一個DOM 元素事件處理函數的時候,我們通常都不會為他們定名字,而是賦予它的對應事件引用一個匿名函數。

  對匿名函數的調用其實還有一種做法,也就是我們看到的jQuery 片段—— 使用() 將匿名函數括起來,然後後面再加一對小括號(包含參數列表)。我們再看一下以下例子:

代碼如下  

copyright © 萬盛學電腦網 all rights reserved