JavaScript中的一个函数怎么可能是;定义为;以不同的方式两次?

JavaScript中的一个函数怎么可能是;定义为;以不同的方式两次?,javascript,function,Javascript,Function,这是《雄辩的JavaScript》一书中的一个例子(我想你知道这本书): 代码的作用不是很重要 问题是:groupBy函数有两个不同的“主体”,就我所见,它做的事情完全不同。在第一个例子中,它有很多逻辑,但第二次,它首先有一个不同的第二个参数(function(person),而不是groupOf,其次,它只是将数组元素属性(即39人数组中的人的死亡日期)除以100 同一个函数怎么能做不同的事情呢?我确实理解 同一功能的这两个实例在某种程度上是合作的,但这种合作的一般原则是什么 谢谢!下面的代码

这是《雄辩的JavaScript》一书中的一个例子(我想你知道这本书):

代码的作用不是很重要

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

同一个函数怎么能做不同的事情呢?我确实理解
同一功能的这两个实例在某种程度上是合作的,但这种合作的一般原则是什么

谢谢!

下面的代码不是“重新定义”
groupBy
。它只是简单地调用它:

var byCentury = groupBy(ancestry, function(person) {
  return Math.ceil(person.died / 100);
}); 
groupBy
函数接收一个回调函数作为第二个参数(
groupOf
)。您将为此传递一个匿名函数,该函数返回
Math.ceil(person.died/100);
第一个参数

function groupBy(array, groupOf) {}
是一个函数声明,其中函数名为groupBy,并且它是全局可访问的

而第二个

var byCentury = groupBy(ancestry, function(person) {});
是一个函数调用。此处返回值按世纪分配给变量

您可能因为
函数(person){}
而感到困惑。
请注意,在Javascript中,我们有第一类函数,这意味着函数与任何其他变量一样处理。因此,函数作为参数传递给函数groupBy

,这会使函数声明与函数调用混淆。第一类是定义函数的功能。第二次调用时在您第二次调用函数并将函数作为第二个参数传递时,请使用参数。您现在应该做的一件事是学习如何使用JavaScript调试器。如果您将
调试器;
语句放在该代码的最顶端,则可以在打开开发工具的情况下将其加载到任何浏览器中。它将在这是
debugger;
语句。然后单击“步进”按钮,看看会发生什么。在查看当前状态并理解它之后,继续单击“步进”。每次单击它,它都会跳转到要执行的下一条语句。然后,您很快就会明白发生了什么。这是第二次出现的
groupBy
正在调用函数。感谢您指出。我已编辑了我的答案
var byCentury = groupBy(ancestry, function(person) {});