Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery和函数范围_Jquery - Fatal编程技术网

jQuery和函数范围

jQuery和函数范围,jquery,Jquery,这是: ($.fn.myFunc = function() { var Dennis = function() { /*code */ } $('#Element').click(Dennis); })(); 相当于: ($.fn.myFunc = function() { $('#Element').click(function() { /*code */ }); })(); 如果没有,请有人解释一下区别,并建议在性

这是:

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

    ($.fn.myFunc = function() {
       $('#Element').click(function() { /*code */ });
    })();
如果没有,请有人解释一下区别,并建议在性能、功能重用和阅读清晰度方面采取更好的方法


谢谢

都一样。我通常使用第二种方法,匿名函数路由

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


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

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

因此,您可以这样做:

($.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();

});

(旁白:您不会调用
$(“#元素”)。单击()
来完成此操作,除非您希望启动
#元素上的所有单击处理程序。)

第二个看起来更漂亮:)
但是它是相同的

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

如果你真的想在那里写一个名字,你可以。但是,名称通常只是为了使它们递归而放在那里