更好地理解javascript中的回调函数

时间:2010-10-13 22:09:17

标签: javascript callback anonymous-function

我正在读一本书中的这个功能,而我不明白匿名功能如何 三个论点是通过了解渴?

这是我理解的

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});
谢谢,理查德

2 个答案:

答案 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时提供的匿名函数可以由该名称引用。

因此,在给出的示例中,使用四个参数调用multiplyByTwo123和匿名函数。在multiplyByTwo函数的范围内,这些参数分别绑定到变量abccallback。这些参数也可以通过特殊的arguments数组引用。在该示例中,两个方法都用于引用参数。前三个是使用循环内的arguments数组引用的,第四个参数是使用其名称引用的,如callback(...)中所示。

答案 1 :(得分:1)

匿名函数在循环中被调用3次,每次传入不同的参数。它第一次传递arguments[0],即aarguments[1]将是b,等等。 arguments是当前正在执行的函数的属性,并且是指传递给函数的参数。在JavaScript中,您不必命名参数,也不必通过名称访问它们,甚至传递所有命名参数。