以下两段代码在处理函数方面有什么区别?
$("#div").someEvent(function(){
myFunction();
});
$("#div").someEvent(myFunction());
答案 0 :(得分:1)
区别在于myFunction
发生时第一次调用someEvent
,其中第二次调用函数myFunction
并尝试将其返回的值注册为处理程序someEvent
。因此,在第二种情况下,myFunction
在执行行$("#div").someEvent(myFunction());
时调用,而不是在事件被触发时调用。
正确的方法是$("#div").someEvent(myFunction);
,这只是对myFunction
的引用作为事件处理程序。
答案 1 :(得分:0)
在你提出的第二个例子中
$("#div").someEvent(myFunction());
函数调用的结果被注册为在someEvent
发生时执行。
因此,当事件被注册时,函数调用发生并且其结果在那里被分配。
当myFunction
是一个在执行函数时返回函数的函数时,可以使用此方法。
像
var myFunction = function () {
return function(){
myFunction();
}
}
$("#div").someEvent(function(){
myFunction();
});
您正在注册一个匿名函数,它将在someEvent
发生时执行。
解释更多
var myFunctionGenerator = function() {
return function(){
myFunction();
}
}
//case1
$("#div").someEvent(function(){
myFunction();
});
//case2
$("#div").someEvent(myFunctionGenerator());
在上面的示例中,代码示例都将执行相同的工作。唯一的区别是case2即使在代码执行后也会将引用留给函数发生器。