Jquery事件处理程序函数

时间:2014-07-01 10:29:17

标签: jquery

以下两段代码在处理函数方面有什么区别?

$("#div").someEvent(function(){
    myFunction();
});


$("#div").someEvent(myFunction());

2 个答案:

答案 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即使在代码执行后也会将引用留给函数发生器。