匿名函数是否比调用函数更有效?

时间:2012-01-15 17:37:54

标签: jquery

我刚开始学习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%的文章都使用匿名文章。我发现有时难以阅读代码,因为我忘记了分号或括号的含义。

3 个答案:

答案 0 :(得分:1)

这个名字,就是区别。两者在运行时都是等效的。只是如果你定义一个匿名函数,你就不能在其他地方重用它。在您不打算重用此代码的情况下,它非常有用。如果要重用它,请使用命名函数。

这是一个我们可以在多个地方重用命名函数的例子:

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

答案 1 :(得分:1)

匿名和匿名函数之间存在无性能差异 如果你只调用一次函数,那么将函数称为名称是不行的。

如果要两次或更多次调用相同的功能,则必须为该功能命名。

答案 2 :(得分: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