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();
});
(旁白:您不会调用
$(“#元素”)。单击()
来完成此操作,除非您希望启动#元素上的所有单击处理程序。)第二个看起来更漂亮:)
但是它是相同的是的,匿名函数更清晰,没有添加多余的立即调用的命名函数
如果你真的想在那里写一个名字,你可以。但是,名称通常只是为了使它们递归而放在那里