将函数传递给缺少参数的jQuery

时间:2011-07-28 19:34:21

标签: javascript jquery syntax

我注意到有时当我在jQuery中传递一个回调函数时,我可以避免让函数指定所有参数。

例如,在.each()函数中,它采用具有参数index,Element的函数。但是,您可以使用比documentation $('li').each(function(index){...}中第一个示例中明显更少的参数。

什么时候有效?为什么这在语法上有效?

5 个答案:

答案 0 :(得分:6)

在Javascript中,您不必将所有参数传递给函数。如果未传递,则默认值为undefined。

答案 1 :(得分:3)

jQuery做的是检查你传递的参数的类型并找出你的意思。这为您提供了一些灵活性。这仅在预期参数是不同类型时有效。例如,如果你有一个函数的三个可能的参数:一个字符串,一个数字和一个函数,那么接收函数可以检查每个参数的类型,并确定哪个参数无论传入的顺序是哪个,哪个是哪个包括在内。

在jQuery中,通常只有一个参数是函数,所以无论jQuery在参数列表中的位置都能找到它。

另一方面,如果函数将两个字符串或两个函数作为参数,那么那些必须以正确的顺序传递,以便接收函数可以知道哪个是哪个。

这可以在javascript中使用,因为:

  1. 如果参数未传递给函数,则javascript只是将函数的结果参数设置为“undefined”,允许调用函数在调用时看到它丢失。
  2. Javascript允许我们检查变量的类型,所以在这种情况下,调用函数可以查看传递的不同类型并修改它的行为。
  3. 如果你看一下click()函数,你会看到jQuery有三种可能的方法来使用它:

    .click()
    .click( handler(eventObject) )
    .click( [eventData,] handler(eventObject) )
    

    在内部,jQuery中的click函数声明如下:

    function (data, handler)
    

    然后,当调用该函数时,jQuery会查看参数数据和处理程序,并确定如果两个参数都未定义,则调用者必须完成:

    .click();
    

    如果只有handler参数未定义且数据参数已定义且是函数类型,则调用者必须使用第二种形式:

    .click(handler)
    

    在这种情况下,jQuery在内部执行此操作以在使用它们之前将参数放入正确的插槽中:

    handler = data;
    data = null;
    

    如果两个参数都未定义,则调用者必须使用:

    .click(data, handler)
    

    它可以使用声明的两个参数。

答案 2 :(得分:1)

它始终有效。 JavaScript中的函数声明提供了参数的名称,但不限制函数的调用方式。换句话说,函数没有像其他语言那样的“类型签名”。

无论如何定义函数,都可以使用任意数量的参数调用函数。

答案 3 :(得分:1)

这是JavaScript的一个功能,而不是jQuery。您可以在调用时传递任意数量的参数。现在它取决于你正在寻找的功能。您还可以使用arguments关键字检索函数参数。

答案 4 :(得分:0)

始终有效。在javascript中,您可以使用比定义更多或更少的参数调用任何函数。因此,命名无参数的函数仍然会传递这两个参数。您甚至可以使用arguments查看参数的值。 arguments[0]将为index等。

相关问题