在jQuery中分配单击侦听器的不同方法

时间:2013-03-08 15:09:10

标签: jquery event-handling

只是想知道之间有什么区别:

$("#some_div").click(customFunction);

$("#some_div").click(function() { customFunction(); });

...

function customFunction() {

    console.dir(this);

}

3 个答案:

答案 0 :(得分:1)

在第二个中,您已经定义了两个函数,一个是匿名函数,另一个是customFunction,首先,您只有一个匿名函数。

答案 1 :(得分:0)

可能没什么区别。除第一个选项外,您只声明了一个函数。

答案 2 :(得分:0)

在实践中,它可能不会有所作为(如果它目前两种方式都有效)。

然而,理论上,存在很大差异。

  1. 所有事件处理程序都会获得event个参数。在你的第一种情况下,这将传递给customFunction,在第二种情况下,它不会传递给undefined。这意味着第一个参数的值为this
  2. jQuery调用事件处理程序,事件的目标为this。但是,customFunction执行第二个案例中的window将指向customFunction
  3. 您可以在附加事件处理程序的时间和执行时间之间更改customFunction变量的值。如果你这样做,你的第一个案例将执行旧函数,第二个案例将“尊重”$("#some_div").click(function() { customFunction.apply(this, arguments); }); 的新值并执行它。
  4. 通常,第二种情况更灵活(但也带有额外嵌套函数调用的开销)。如果您确实需要额外的灵活性(参见第3点)而不做出任何牺牲(第1点和第2点),请使用以下结构:

    this

    这将使用原始参数以及内部函数(customFunction)调用的customFunction(外部函数),但仍允许您换出{的实现{1}}到执行事件处理程序时。