我注意到有时当我在jQuery中传递一个回调函数时,我可以避免让函数指定所有参数。
例如,在.each()
函数中,它采用具有参数index,Element
的函数。但是,您可以使用比documentation $('li').each(function(index){...}
中第一个示例中明显更少的参数。
什么时候有效?为什么这在语法上有效?
答案 0 :(得分:6)
在Javascript中,您不必将所有参数传递给函数。如果未传递,则默认值为undefined。
答案 1 :(得分:3)
jQuery做的是检查你传递的参数的类型并找出你的意思。这为您提供了一些灵活性。这仅在预期参数是不同类型时有效。例如,如果你有一个函数的三个可能的参数:一个字符串,一个数字和一个函数,那么接收函数可以检查每个参数的类型,并确定哪个参数无论传入的顺序是哪个,哪个是哪个包括在内。
在jQuery中,通常只有一个参数是函数,所以无论jQuery在参数列表中的位置都能找到它。
另一方面,如果函数将两个字符串或两个函数作为参数,那么那些必须以正确的顺序传递,以便接收函数可以知道哪个是哪个。
这可以在javascript中使用,因为:
如果你看一下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
等。