代码之家  ›  专栏  ›  技术社区  ›  Jason

jQuery和函数范围

  •  7
  • Jason  · 技术社区  · 16 年前

    这是:

        ($.fn.myFunc = function() {
           var Dennis = function() { /*code */ }
           $('#Element').click(Dennis);
        })();
    

    相当于:

        ($.fn.myFunc = function() {
           $('#Element').click(function() { /*code */ });
        })();
    

    如果没有,请有人解释一下两者的区别,并建议在性能、功能重用和阅读清晰度方面采取更好的方法。

    谢谢!

    4 回复  |  直到 16 年前
        1
  •  8
  •   Joel    16 年前

    唯一的区别是前者提供了对函数的引用。

    ($.fn.myFunc = function() {
       var Dennis = function() { /*code */ }
       $('#Element').click(Dennis);
    
       Dennis();
    })();
    

    后者是不可能的。

    $(function(){ 
    
        var manipulateSomething = function() {
            // do stuff
        };
    
        // do it on click
        $("#Element").click(manipulateSomething);
    
        // and do it right now (document.ready)
        manipulateSomething();
    
    });
    

    (旁白:你不会打电话的 $("#Element").click(); 除非你想要所有的点击处理程序 #Element

        2
  •  0
  •   Plynx    16 年前

    是一样的。我通常使用第二种方法,匿名函数路径。

    在第一个示例中,将函数命名为inline的唯一原因是您是否需要再次使用它,或者稍后在函数中使用它,或者您是否希望非常清楚函数是什么。但即便如此,如果 Dennis 如果函数接受参数 仍然 需要在调用中使用新的函数作用域来传递这些参数。

    匿名函数闭包是更健壮的模式。

        3
  •  0
  •   Germán Rodríguez    16 年前

        4
  •  0
  •   alex    16 年前

    是的,匿名函数更清晰,但没有添加多余的命名函数立即调用。

    如果你真的想把名字放在那里,你 can