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
没有看到事件
参数。