6

我正在学习 JavaScript。我知道我们可以在定义函数后将函数传递给其他函数。但我需要帮助来理解这个例子:

function map(func, array) {
  var result = [];
  forEach(array, function (element) {
    result.push(func(element));
  });
  return result;
}

据我了解,func是map的一个参数。我需要提供一个函数作为func。但是在我正在阅读的教程中,并没有提到这个 func 来自哪里,似乎不需要指定这个参数?教程中的另一个例子是相同的:

 function count(test, array) {
  return reduce(function(total, element) {
    return total + (test(element) ? 1 : 0);
  }, 0, array);
}

这个测试函数等于 element === 0 ? 1 : 0 ,但是教程并没有说我需要写下测试函数。我需要编写这个测试函数吗?

4

2 回答 2

4

编辑:在您发布的教程的链接中,传递的函数是一个预定义的函数Math.round。我下面的示例显示了创建自己的函数来传递。


map示例显示了实现。当您调用map.

从它的外观来看,map将数组中的当前项传递给您的函数,您的函数应该对其进行处理并返回结果。您的函数返回的结果将添加到新数组中。

var arr = [1,2,3,4,5];
var my_func = function(item) { return item * 2; };

var new_arr = map(my_func, arr);

console.log(new_arr); // [2,4,6,8,10]
  1. 我们创建了一个 Array ( arr)

  2. 我们创建了一个函数( my_func),它接受给定的任何内容,并将其乘以 2。

  3. 我们都通过了map

  4. map函数迭代 our arr,将每次迭代中的当前项传递给我们的函数。

  5. 我们的函数获取当前项目,并返回将其乘以 2 的结果。

  6. map函数获取该结果,并将其添加到新数组中。

  7. 迭代完成后,map函数返回新的数组。

于 2012-06-16T02:07:56.233 回答
0

调用 map 时,传递的是内联函数或现有函数。

// The following would return [2,3,4]
map(function(item) { return item + 1}, [1,2,3]);

function double(item) {return item*2}
map(double, [1,2,3])
// returns [2,4,6]

// Your example, Math.round
map(Math.round, [0.01, 2, 9.89, Math.PI])
// returns [0,2,10,3]

另一种说法是,一个函数可以像任何其他参数一样传递给另一个函数。这与函数在同一行上就像可以从函数传递或返回的任何其他变量一样

function createAdder(toAdd) {
    return function (num) {
        return num + toAdd;
    }
}

var add5 = createAdder(5);
add5(2); // returns 7


var add7 = createAdder(7);
add7(-2); // returns 5
于 2012-06-16T02:14:22.810 回答