当前位置: 首页 > 知识库问答 >
问题:

JavaScript中的一个函数如何以不同的方式“定义”两次?[重复]

沈华皓
2023-03-14

这是“Eloquent JavaScript”书中的一个例子(我想你知道这本书):

function groupBy(array, groupOf) {
  var groups = {};
  array.forEach(function(element) {
    var groupName = groupOf(element);
    if (groupName in groups)
      groups[groupName].push(element);
    else
      groups[groupName] = [element];
  });
  return groups;
}

var byCentury = groupBy(ancestry, function(person) {
  return Math.ceil(person.died / 100);
});

代码做什么并不重要。

问题是:据我所知,groupBy函数有两个不同的'body',即它做完全不同的事情。在第一个实例中,它做了很多逻辑,但第二次它,首先,有一个不同的第二个参数(函数(人)而不是groupOf,其次,它只是将一个数组元素属性(即39人数组中一个人的死亡日期)除以100。

为什么同一个函数做不同的事情?我确实理解
同一个函数的这两个实例以某种方式合作,但是这种合作的一般原则是什么?

谢谢!

共有2个答案

冯风史
2023-03-14

第一个

function groupBy(array, groupOf) {}

是一个函数声明,其中函数的名称为 groupBy,并且可全局访问。

而第二个

var byCentury = groupBy(ancestry, function(person) {});

是函数调用。这里,返回值按世纪分配给变量。

可能您由于函数(人){}而感到困惑。请注意,在Javascript中,我们有First Class Functions,这意味着函数被视为任何其他变量。因此函数作为参数传递给函数组By

陆宾白
2023-03-14

下面的代码没有“重新定义”< code>groupBy。它只是简单地称之为:

var byCentury = groupBy(ancestry, function(person) {
  return Math.ceil(person.died / 100);
}); 

groupBy 函数接收回调函数作为第二个参数 (groupOf)。你在那里传递一个匿名函数,它返回Math.ceil(person.dieed / 100);

 类似资料:
  • 我每次都得到10个相同的结果:

  • 问题内容: 我有两个并且彼此相关,例如,与“ e1.jpg”相关的“ H1.txt”。如何imgList根据的随机化自动对列表进行随机化?像在excel中一样,如果我们对某些列进行排序,其他列是否会自动跟随? 随机化后输出,例如: 预期的输出: 问题答案: 使用Collections.shuffle()两次,并Random用相同的种子初始化两个对象: 使用具有相同种子的两个对象可确保两个列表将以完

  • 我想在中的包中使用功能,它有一个需求,作为

  • 就像标题说的useFetch自定义钩子,我做了两次返回数据,我的意思是什么。当我console.log我获取的数据有两个输出,其中一个是空值,另一个是我想要的数据,因为有空值的数据,这是一个问题,因为我不能实现包含我想要的数据的表。下面是代码: 这就是我想使用我获取的数据的地方: 当我刷新页面时,有一个错误“数据为空”,如何修复?

  • 是否可以将具有不同用户角色的用户重定向到laravel 5.1中的不同页面? 我研究了Auth中间件和Auth控制器,但没有发现任何处理登录请求本身的东西。 我发现了一些关于登录重定向在这里Laravel重定向回到原来的目的地后登录,但我不知道在哪里把建议的代码片段。 有人能帮我吗

  • 我有一些测试方法: 当我尝试运行此方法时,出现了异常: 我怎么能嘲弄这种方法呢?