2012-01-15 60 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功能之间没有性能差异
如果只调用一次该函数,则可以重新调用该函数的名称。

如果您想调用两次或更多次相同的函数,您必须命名该函数。