【发布时间】:2018-02-01 23:38:55
【问题描述】:
这是“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 函数有两个不同的“主体”,即据我所知,它做的事情完全不同。在第一种情况下,它做了很多逻辑,但第二次,它首先有一个不同的第二个参数(function(person) 而不是groupOf,其次,它只是划分了一个数组元素属性(即39 人的数组中的一个人的死亡日期)乘以 100。
同一个函数怎么会做不同的事情呢?我明白了
相同功能的这两个实例以某种方式合作,但这种合作的一般原则是什么?
谢谢!
【问题讨论】:
-
您将函数声明与函数调用混淆了。第一个是定义函数的作用。第二次使用参数调用它
-
第二次调用函数并将函数作为第二个参数传递。
-
您现在应该做的一件事是学习如何使用 JavaScript 调试器。如果您在此代码的最顶部放置
debugger;语句,则可以在打开开发者工具的任何浏览器中加载它。它将在debugger;声明处停止。然后单击 Step In 按钮,看看会发生什么。查看当前状态并理解后,继续单击 Step In。每次单击它都会跳到下一条要执行的语句。然后你很快就会明白发生了什么。这是guide to the Chrome DevTools。
标签: javascript function