这是:
($.fn.myFunc = function() {
var Dennis = function() { /*code */ }
$('#Element').click(Dennis);
})();
相当于:
($.fn.myFunc = function() {
$('#Element').click(function() { /*code */ });
})();
如果没有,有人可以解释一下这些差异,并建议更好的方法,包括性能,功能重用和阅读清晰度。
谢谢!
答案 0 :(得分:8)
唯一的区别是前者提供了对函数的引用。
因此,您可以这样做:
($.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
来完成此任务。)
答案 1 :(得分:0)
它是一样的。我通常选择第二个,即匿名函数路径。
如第一个示例所示,将函数命名为内联的唯一原因是,如果您需要再次使用它,可能在函数的后期,或者您想要非常清楚函数是什么。但即使在这种情况下,如果Dennis
函数要接受参数,那么仍然需要在调用中使用新的函数作用域来传递这些参数。
匿名函数闭包是更强大的模式。
答案 2 :(得分:0)
第二个看起来更漂亮:) 但它是一样的
答案 3 :(得分:0)
是的,匿名函数更清晰,但没有添加多余的命名函数,这些函数会立即被调用。
如果你真的想在那里写一个名字,你can。通常只会将名称放在那里以使它们递归。