jQuery:为什么使用匿名函数作为参数?

Gre*_*gir 1 javascript jquery anonymous-function

在尝试同时掌握jQuery和JavaScript的一些基础知识时,我有点困惑为什么jQuery将匿名函数作为参数.像这样:

$( "#target" ).click(function() {
  alert( "Handler for .click() called." );
});
Run Code Online (Sandbox Code Playgroud)

与此相反:

$( "#target" ).click(alert("You clicked it."));
Run Code Online (Sandbox Code Playgroud)

在jQuery自己的"101"指南中,他们指出"将函数作为参数传递是jQuery中非常常见的习惯用法".但他们似乎没有解释原因.它只是为一组表达式提供一个包装器,或者(我怀疑)远不止于此?

Chr*_*nte 5

要回答您的具体问题,原因是因为此代码:

$( "#target" ).click(alert("You clicked it.");
Run Code Online (Sandbox Code Playgroud)

执行以下操作:

  1. alert使用"You clicked it."as参数调用
  2. 将该alert调用的结果(即undefined)作为单击处理程序绑定#target.

换句话说,alert立即调用并undefined绑定为事件处理程序,这没有任何意义.

而使用第一个代码片段:

$( "#target" ).click(function() {
  alert( "Handler for .click() called." );
});
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个匿名函数[ alert( "Handler for .click() called." );]
  2. 并且该表达式(函数)的结果被绑定为事件处理程序

有关匿名函数的详细信息,请参阅此问题.