不知道这两者有什么区别
$("#some_div").click(customFunction);
和
$("#some_div").click(function() { customFunction(); });
…
function customFunction() {
console.dir(this);
}
在第二个你已经定义了两个函数一个匿名和另一个customFunction,在第一个你只有一个匿名函数。
可能没有区别。除了在第一个选项中,您只声明了一个函数。
在实践中,它可能不会有什么不同(如果它目前是双向的)。
然而,从理论上讲,两者有很大的区别。
- 所有事件处理程序获得一个
event
参数。在第一种情况下,它被传递给customFunction
,在第二种情况下,它不是。这意味着第一个参数的值将是undefined
。 jQuery调用事件处理程序,事件的目标为 - 您可以在事件处理程序附加时间和执行时间之间更改
customFunction
变量的值。如果你这样做,你的第一个情况将执行旧的函数,然而,第二个情况将"尊重"customFunction
的新值并执行它。
this
。然而,第二个案例的customFunction
执行中的this
将指向window
。一般来说,第二种情况更加灵活(但也带来了额外的嵌套函数调用的开销)。如果您确实需要在不牺牲(第1点和第2点)的情况下增加灵活性(参见第3点),请使用以下结构:
$("#some_div").click(function() { customFunction.apply(this, arguments); });
这将使用原始参数以及内部函数(customFunction
)调用的this
(外部函数),但仍然允许您在事件处理程序执行时交换出customFunction
的实现。