这是来自“机锋的JavaScript”一书为例(我想你知道这本书):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',即它完全不同的东西,据我所知。在第一个例子中,它做了很多逻辑,但是第二次,它第一次有不同的第二个参数(function(person)
而不是groupOf
,第二,它只是分割一个数组元素属性(这是死亡日期由100
一个人在39人)数组怎么会这样,同样的功能也不同的东西?我不明白,
相同功能的这两种情况下莫名其妙地合作,但究竟是一般的原则这种合作的?
谢谢!
函数声明与函数调用混淆在一起。第一个是定义该功能的功能。第二次用参数 – abhishekkannojia
调用它第二次调用函数并传递一个函数作为第二个参数。 –
你现在应该做的一件事是学习如何使用JavaScript调试器。如果你在代码的最上面放置了一个'debugger;'语句,你可以在开发工具打开的任何浏览器中加载它。它将停止在'debugger;'语句中。然后点击Step In按钮,看看会发生什么。在查看当前状态并理解它之后,请继续单击“步入”。每次点击它时,它都会跳到下一个要执行的语句。那么你很快就会明白发生了什么。这是一个[Chrome DevTools指南](https://developer.chrome.com/devtools)。 –