为什么在jQuery API文档中使用参数列出了处理函数?

时间:2013-01-10 12:50:32

标签: jquery syntax

在jQuery手册中,它将blur函数显示为:

.blur(handler(eventObject)) // PLUS 2 OTHER VARIATIONS 

所以对我来说使用这个功能你会得到这样的东西:

<!DOCTYPE html>
<html>
  <head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
  </head>
  <body>
    <form>
      <input id="target" type="text" value="Field 1" />
      <input type="text" value="Field 2" />
    </form>
    <div id="other">Trigger the handler</div>
    <script>
      $('#target').blur(myhandler(evObj));

      function myhandler(evObj) {
        console.log(evObj);
      };
    </script>
  </body>
</html>

但是$('#target').blur(myhandler(evObj));不是正确的语法正确的语法$('#target').blur(myhandler);

总的来说,脚本标记的整个代码应该是:

<script>
  $('#target').blur(myhandler);

  function myhandler(e) {
    console.log(e);
  };
</script>
  1. 为什么会这样?
  2. 有人应该知道不写.blur(handler(eventObject))吗?

2 个答案:

答案 0 :(得分:3)

你是正确的,技术上正确的语法是

blur(handler)

然而,这实际上并不是非常有用,因为如果您正在查看文档,您可能想知道处理程序接收的参数。显而易见的是,您使用函数作为唯一参数调用blur,因此jQuery文档 par abus de notation

blur(handler(eventObj))

表示处理函数采用一个参数,即事件对象。

答案 1 :(得分:1)

在JavaScript中,函数只是另一种对象。你偶然发现写myfunctionmyfunction()之间的巨大差异 - 第一个是函数对象,第二个是函数的返回值。

所以:$('#target').blur(...)是一个接受一个对象的方法,必须是一个函数。

当您撰写$('#target').blur( myhandler(evObj) )时,myhandler 功能不会传递给.blur()。相反,它后面的括号告诉JavaScript评估函数(使用参数evObj),而函数的返回值则传递给.blur()

如果返回值恰好是另一个函数对象,那么一切都很好。但如果没有,你会收到错误。

但是,通常,开发人员不会声明单独的函数myhandler。相反,我们将使用匿名函数,如下所示:

$('#target').blur(function(evObj) {
    /* do stuff with evObj */
})

那是 API文档写$('#target').blur( myhandler(evObj) )的原因 - 所以开发人员知道匿名处理函数接受了哪些参数。