我正在读一本书中的这个功能,而我不明白匿名功能如何 三个论点是通过了解渴?
这是我理解的
function multiplyByTwo(a, b, c, callback) {
var i, ar = [];
for(i = 0; i < 3; i++) {
ar[i] = callback(arguments[i] * 2);
}
return ar;
}
但不是这个
myarr = multiplyByTwo(1, 2, 3, function(a){return a + 1});
谢谢,理查德
答案 0 :(得分:2)
详细说明multiplyByTwo
功能合同的一些评论在这里会有所帮助:
// multiplyByTwo
// num num num (num -> x) -> x[]
function multiplyByTwo(a, b, c, callback) {
...
这意味着该函数接受四个参数,并返回一个x
数组。 x
可以是任何类型。前三个参数是数字。函数的第四个参数实际上是一个函数本身。此函数采用数字,并返回x
。同样,x
可以是任何类型,但在整个合同中它是相同的类型。
在multiplyByTwo
函数内,对每个其他参数调用一次回调函数。每个调用的结果都会添加到一个数组中,该数组是multiplyByTwo
的返回值。
arguments
变量是javascript中的一个特殊变量,在函数范围内,可以作为数组访问该函数的所有参数。
回调函数绑定到callback
函数范围内的名称multiplyByTwo
。然后可以将其作为任何其他函数调用,例如通过附加括号和参数。您调用multiplyByTwo
时提供的匿名函数可以由该名称引用。
因此,在给出的示例中,使用四个参数调用multiplyByTwo
:1
,2
,3
和匿名函数。在multiplyByTwo
函数的范围内,这些参数分别绑定到变量a
,b
,c
和callback
。这些参数也可以通过特殊的arguments
数组引用。在该示例中,两个方法都用于引用参数。前三个是使用循环内的arguments
数组引用的,第四个参数是使用其名称引用的,如callback(...)
中所示。
答案 1 :(得分:1)
匿名函数在循环中被调用3次,每次传入不同的参数。它第一次传递arguments[0]
,即a
(arguments[1]
将是b
,等等。 arguments
是当前正在执行的函数的属性,并且是指传递给函数的参数。在JavaScript中,您不必命名参数,也不必通过名称访问它们,甚至传递所有命名参数。