0

只是想知道有什么区别:

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

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

...

function customFunction() {

    console.dir(this);

}
4

3 回答 3

1

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

于 2013-03-08T15:10:26.557 回答
0

应该没什么区别吧。除了在第一个选项中,您只声明了一个函数。

于 2013-03-08T15:10:58.243 回答
0

在实践中,它可能不会有所作为(如果它目前可以双向工作)。

然而,理论上,有很大的不同。

  1. 所有事件处理程序都有一个event参数。在您的第一种情况下,这被传递给customFunction,在第二种情况下,它不是。这意味着第一个参数的值将是undefined.
  2. jQuery 调用事件处理程序,事件的目标为this. 但是this,在customFunction执行您的第二种情况时,将指向window.
  3. customFunction您可以在附加事件处理程序和执行事件处理程序之间更改变量的值。如果您这样做,您的第一个案例将执行旧函数,但是,第二个案例将“尊重”新值customFunction并执行它。

一般来说,第二种情况更灵活(但也会带来额外的嵌套函数调用的开销)。如果您确实需要在不牺牲(第 1 点和第 2 点)的情况下增加灵活性(参见第 3 点),请使用以下构造:

$("#some_div").click(function() { customFunction.apply(this, arguments); });

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

于 2013-03-08T15:16:56.940 回答