2012-01-15 56 views
3

我剛開始學習jQuery。我更多的是一個HTML + CSS網頁設計師,所以你可能會告訴函數會適應一些,特別是匿名的。匿名函數比調用函數更有效嗎?

那麼,什麼是如果

之間
$('p.expander').toggle(
    function() { 
    $(this).prev().addClass('open'); 
    }, 
    function() { 
    $(this).prev().removeClass('open'); 
    } 
); 

說...

function toggle1() { $(this).prev().addClass('open');} 
function toggle2() { $(this).prev().removeClass('open');} 
$('p.expander').toggle(toggle1, toggle2); 

,如果你使用它,一旦你使用匿名函數的區別?如果你打算多次使用函數,你應該調用它?

正如標題所述,比另一個更有效嗎?因爲它似乎有99%的文章使用匿名文章。我發現有時難以閱讀代碼,因爲我忘記了分號或括號。

回答

1

在那個特定的情況下,沒有區別。但考慮:

$(document).ready(function(){ 

    var a, b, c, 
     d, e, f, 
     g, h, i; 


    $('p.expander').toggle(
     function() { 
     $(this).prev().addClass('open'); 
     }, 
     function() { 
     $(this).prev().removeClass('open'); 
     } 
    ); 
}); 

VS

function toggle1 { $(this).prev().addClass('open');} 
function toggle2 { $(this).prev().removeClass('open');} 

$(document).ready(function(){ 

    var a, b, c, 
     d, e, f, 
     g, h, i; 


    $('p.expander').toggle(toggle1, toggle2); 
}); 

在這種情況下,匿名函數包含大環境下(使用更多內存),因爲他們知道,除非a, b, c, d, e, f, g, e, h, i瀏覽器優化它。

+0

這很有趣。在下面的例子中,他們不知道變量a-i?爲什麼上面的例子使用更多?它有什麼更大的環境......? – Matt 2012-01-15 17:53:11

+0

@Ali不,他們不這樣做,因爲他們被宣佈超出範圍。雖然你很難找到一個不優化這個功能的瀏覽器。 – Esailija 2012-01-15 18:04:35

1

名稱,這是區別。兩者在運行時是等效的。只是如果你定義一個匿名函數,你不能在其他地方重用它。在您不打算重用此代碼的情況下,它非常有用。當你想重用它時使用一個命名函數。

下面是一個例子,我們可以重複使用命名功能在多個地方:

$('p.expander').toggle(toggle1, toggle2); 
$.post('/foo/bar', toggle1); 
$('a.foo').click(toggle2); 
1

匿名和unanonymous功能之間沒有性能差異
如果只調用一次該函數,則可以重新調用該函數的名稱。

如果您想調用兩次或更多次相同的函數,您必須命名該函數。