2012-07-25 56 views
1

所以我開始學習javacript,我注意到了在功能和回調的編碼約定是這樣的(這是一個jQuery的例子,但我看到這些無處不在):代碼約定函數和回調

$.getJSON('some/url.json', function(a) { 
// do stuff with a here 
}); 

從其他語言,我通常會寫上,因爲這:

function myFunction(myVar){ 
//do stuff with myVar here 
}; 

$.getJSON('some/url.json', myFunction()); 

爲什麼前者通常在JS寫的首選方式,而不是[可能更具可讀性]後者?

+1

第二個例子不起作用(你實際上用var'a'調用'myFunction')。 – Ashe 2012-07-25 01:32:23

+0

第二個例子仍然不起作用。您正在傳遞評估函數(離開'a'未定義),而不是傳遞函數(即沒有參數列表的函數名):'myFunction'。 – 2014-01-10 23:00:15

回答

2

有充足的理由來使用第二個,更明確,格式(假設您解決在評論中列出的問題),其中包括:

  • 重用作爲回調
  • 給人傳遞的函數該功能的最終名稱以使其更易於調試
  • 確保功能被標註爲一些重要的東西在你的系統
  • 分離出該功能,因爲它只是太長到位
  • 舒適聲明

但是第一種格式,以匿名函數作爲回調函數傳遞的格式很短且很有用。如果你不需要重用函數,如果它相對較短,並且在你的系統中不重要,那麼在你使用它的地方聲明它是非常有用的。您避免向範圍中添加其他變量,並且完全清楚該功能的用途。

1

這不是首選的方式。你可以做任何你想做的事。但是,如果您需要重用的功能,那麼你需要做你的第二個選項,或者下面的代碼重用:

// in some accessible context/namespace 
App.myCallback = function(a){ 
... 
}; 

// somewhere else 
$.getJSON('url', App.myCallback); 
0

你的第一個例子就是作爲一個匿名函數或塊參考。他們只會被調用一次。第二個例子是當你多次使用這個函數的時候......如果你一遍又一遍地重複匿名塊,那將會造成很多浪費。