$(window).resize(myFunction());
立即地calls myFunction
并通过返回值 to resize
。在函数名称/引用后添加括号调用该函数。
另一方面,
$(window).resize(function(){myFunction()});
通过一个匿名函数 to 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
返回一个函数应该用作事件处理程序:
function myFunction() {
var handler = function() {};
return handler;
}
也许返回的处理程序取决于传递给的参数myFunction
.
如果要调用,则需要传递匿名函数myFunction
有一些具体的论点:
function myFunction(a, b) {
alert(a + b);
}
$(window).resize(function(){
myFunction(40, 2);
});
Update:
@T.J。克劳德 https://stackoverflow.com/users/157247/t-j-crowder发表了重要评论event object http://api.jquery.com/category/events/event-object/。每个事件处理程序都会获取作为第一个参数传递的事件对象。如果您将函数定义为
function myFunction(event) {
...
}
要使用匿名函数(更容易)访问它,您必须通过以下方式传递它:
$(window).resize(function(event){myFunction(event)});
如果你想使用它。