2013-02-07 140 views
2

我試着用Google搜索的答案,但問題是我真的不知道如何解決這個問題,我只是找到了錯誤的主題。聲明一個新的函數與立即調用它?

有什麼區別:

this.on('click',thisismyfunction); 

和:

this.on('click', function(){ 

thisismyfunction(); 

}); 

回答

3

一個顯着的區別:第一個函數將被直接傳遞事件對象,以任何你的名字的thisismyfunction,或者在arguments[0]第一個參數進行訪問。在第二個版本中,該對象將被傳遞給外部匿名函數。

此外,在這兩個示例什麼都沒有馬上被調用。你將兩個函數(第一種情況下的命名函數或第二種情況下的匿名函數)綁定爲事件處理程序,因此它們將在相關事件發生後調用。

你使用哪一個將主要取決於代碼結構和風格。正如bennett_an所說,當您將相同的功能綁定到多個事件時,最好使用第一種變體。

+0

所以從技術上講,如果我需要發送正確的參數,我會使用匿名函數? –

+0

不,你得到了傳遞給'.on()',無論命名的函數的參數。但是,如果您使用匿名函數從那裏調用另一個函數,那麼除非您明確地將它們傳遞給其他函數,否則此函數將不會獲取該事件對象。 – bfavaretto

1

真的沒事。

第一個示例將直接綁定到thisismyfunction。第二個示例將綁定到一個匿名函數,然後在調用時調用thisismyfunction()

2

一個是命名函數。重點在於,您可能會多次從多個地方調用該函數。另一個是自治功能。它基本上就像是說「執行以下操作:」

函數:JavaScript中的函數可以是有名稱的或匿名的。 命名函數可以使用function關鍵字定義如下:

function named(){ 
    // do some stuff here 
} 

匿名函數可以被 以類似的方式作爲一個正常的功能定義,但它不會有任何 名。

可以將一個匿名函數分配給一個變量或傳遞給一個 方法,如下所示。

var handler = function(){ 
    // do some stuff here 
} 

jQuery讓一個 匿名函數的使用非常頻繁如下:

$(document).ready(function(){ 
    // do some stuff here 
}); 

由於從TutorialsPoint jQuery Basics

0

thisismyfunction採取將收到沒有參數。你將它嵌入匿名函數的方式。

0

在你的例子中,結果可能沒有區別。但這兩種方法都表現得有一點不同:

第一個例子:

  • this自己的函數中是指點擊的元素上
  • 事件對象將通過它的參數傳遞給元素

第二示例

  • this自己的函數中是指匿名函數
  • ,你可以很容易地通過自己的論點,或者根本就沒有在這種情況下
  • 您可將多個函數調用同一事件

那麼哪種風格你使用取決於你自己的喜好,你想實現什麼