javascript:传递函数

javascript:传递函数,javascript,Javascript,我正在学习javascript。我知道我们可以在定义函数后将函数传递给其他函数。但是我需要帮助来理解这个例子: function map(func, array) { var result = []; forEach(array, function (element) { result.push(func(element)); }); return result; } 据我所知,func是map的一个参数。我需要提供一个函数作为func。但是在我阅读的教程中,它没有提到

我正在学习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);
}
此测试函数等于元素===0?1:0,但是教程没有说我需要写下测试函数。是否需要编写此测试函数?

编辑:在您发布的教程链接中,传递的函数是预定义的函数
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]
  • 我们创建了一个数组(
    arr

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

  • 我们将两者传递给
    map

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

  • // 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]
    
  • 我们的函数获取当前项,并返回它乘以2的结果

  • 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]
    
  • 迭代完成后,
    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]
    

    调用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
    

    也许是的。@Jenny:更新了我的答案。在该教程中,一个预定义函数被传递到
    map
    。该函数是
    Math.round
    。您可以选择创建自己的传递函数。@Jenny在该链接中,您不需要自己编写
    func
    函数;该示例使用
    Math.round
    作为函数,因此该示例对数组中的每个数字调用
    Math.round
    ,并返回一个输入数字数组,使用
    Math.round
    进行舍入。感谢您的帮助。在读了你的答案后,我才知道等号是函数测试。