jQuery和函数范围

Jas*_*son 7 jquery

这是:

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

相当于:

    ($.fn.myFunc = function() {
       $('#Element').click(function() { /*code */ });
    })();
Run Code Online (Sandbox Code Playgroud)

如果没有,有人可以解释差异,并建议更好的路线,性能,功能重用和阅读清晰度.

谢谢!

Joe*_*oel 8

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

因此,你可以这样做:

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

   Dennis();
})();
Run Code Online (Sandbox Code Playgroud)

后者无法做到这一点.

这可能很有用.例如,我可能希望单击操作页面的一部分,但我也想在页面加载时执行此操作.我可以这样做:

$(function(){ 

    var manipulateSomething = function() {
        // do stuff
    };

    // do it on click
    $("#Element").click(manipulateSomething);

    // and do it right now (document.ready)
    manipulateSomething();

});
Run Code Online (Sandbox Code Playgroud)

(旁白:$("#Element").click();除非你想要点击所有点击处理程序,否则你不会打电话来完成这个#Element.)