Javascript 为什么在jQuery中调用函数需要包装在方法中?

Javascript 为什么在jQuery中调用函数需要包装在方法中?,javascript,jquery,function,Javascript,Jquery,Function,假设我有一个函数: function myFunction() { ... } 我想从事件处理程序调用它。为什么这个结构不调用我的函数 $(window).resize(myFunction()); 但这确实起到了关键作用: $(window).resize(function(){myFunction()}); 这些类型的呼叫之间有什么区别 $(window).resize(myFunction()); 立即调用myFunction并将返回值传递给调整大小。在函数名/引用后添加括号调用

假设我有一个函数:

function myFunction() {
 ...
}
我想从事件处理程序调用它。为什么这个结构不调用我的函数

$(window).resize(myFunction());
但这确实起到了关键作用:

$(window).resize(function(){myFunction()});
这些类型的呼叫之间有什么区别

$(window).resize(myFunction());
立即调用
myFunction
并将返回值传递给
调整大小
。在函数名/引用后添加括号调用函数

另一方面,

$(window).resize(function(){myFunction()});
将匿名函数传递给
resize
myFunction
仅在调用外部函数时调用

匿名函数没有什么特别之处。在本例中,它只是某种内联函数定义。您可以轻松地将其替换为函数引用:

var handler = function(){myFunction()}; // take out the function definition
$(window).resize(handler);  // and replace it with the new name
现在您可以看到函数名后面没有括号,这意味着,
handler
没有被调用,只传递了引用

我希望您现在也能看到,在这个示例中创建一个新函数是没有必要的。只需将引用传递给
myFunction
,即可实现相同的功能:

$(window).resize(myFunction);

但这两种方法都有各自的用例

第一个例子是
$(window).resize(myFunction())myFunction
返回一个应用作事件处理程序的函数,则code>仍然有用:

function myFunction() {
    var handler = function() {};
    return handler;
}
可能返回的处理程序取决于传递给
myFunction
的参数

如果要使用某些特定参数调用
myFunction
,则必须传递匿名函数:

function myFunction(a, b) {
    alert(a + b);
}

$(window).resize(function(){
    myFunction(40, 2);
});

更新:

就这件事发表了重要评论。每个事件处理程序都获取作为第一个参数传递的事件对象。如果你把你的函数定义为

function myFunction(event) {
 ...
}
要使用匿名函数(更容易)访问它,您必须通过以下方式传递它:

$(window).resize(function(event){myFunction(event)});
如果您想使用它。

“您只需传递一个对
myFunction
的引用,就可以实现同样的效果:”“它略有不同。在这种情况下,
myFunction
将接收
事件
参数,而使用他/她
$(window).resize(function(){myFunction()})版本,
myFunction
没有看到
事件
参数。