在jQuery中分配点击监听器的不同方法



不知道这两者有什么区别

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

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

function customFunction() {
    console.dir(this);
}

在第二个你已经定义了两个函数一个匿名和另一个customFunction,在第一个你只有一个匿名函数。

可能没有区别。除了在第一个选项中,您只声明了一个函数。

在实践中,它可能不会有什么不同(如果它目前是双向的)。

然而,从理论上讲,两者有很大的区别。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新