javascript - Great-great-great-great-…示例- Eloquent JS

标签 javascript

我在Eloquent JS的“高阶函数”一章中的“Great-great-great-great -...”示例中苦苦挣扎。我不明白这些功能之一是如何从仅包含祖先数据的对象中创建一个值的。功能如下:

function reduceAncestors(person, f, defaultValue) {
   function valueFor(person) {
      if (person == null)
         return defaultValue;
      else
         return f(person, valueFor(byName[person.mother]),
                   valueFor(byName[person.father]));
    }
  return valueFor(person);
}


function sharedDNA(person, fromMother, fromFather) {
  if (person.name == "Pauwels van Haverbeke")
    return 1;
  else
    return (fromMother + fromFather) / 2;
}

我不明白valueFor(byName [person.mother])如何从这样的对象生成数值:
"Carolus Haverbeke" : {
    "name": "Carolus Haverbeke", 
    "sex": "m", 
    "born": 1832, 
    "died": 1905, 
    "father": "Carel Haverbeke", 
    "mother": "Maria van Brussel"}

最佳答案

如果您跳过sharedDNA的函数声明,则会看到以下内容:

var ph = byName["Philibert Haverbeke"];
console.log(reduceAncestors(ph, sharedDNA, 0) / 4);

如果将其追溯到reduceAncestors,则参数映射到:
person -> { name: "Philibert Haverbeke", ... },
f -> sharedDNA,
defaultValue -> 0

现在,看看valueFor()。它总是返回一个数字,即defaultValuesharedDNA的结果,该结果始终返回一个数字。这是关键:如果一个人没有 parent ,则使用defaultValue,否则,它会在给定关系之间生成一个sharedDNA的比率,如果该人恰好被命名为“Pauels van Haverbeke,则在第三种情况下为'1' ”。

要回答您的问题,“valueFor(...)如何从人员对象生成数字值”,是它仅返回sharedDNA递归生成的值。

关于javascript - Great-great-great-great-…示例- Eloquent JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27366010/

相关文章:

Javascript 动态更改输入类型在 IE8 上不起作用

javascript - Selenium +火狐 : How can I go with both Firefox binary specification and Firebug extension addition?

javascript - 单击时,突出显示表列

javascript - 'can' t read property foo of undefined' 和 'undefined is not an object' 之间有什么区别

javascript - 可水平拖动/移动 <div>

javascript - knockout.js 如何在 ko.computed 写入中取消 confirm() 后设置所选选项

javascript - Discord.js - 正确使用 : for (const guild of client. guilds.cache)?

javascript - Backbone.js 为什么我必须使用下划线 (_.each) 来定位模型?

javascript - Knockout.js 中的级联下拉菜单

javascript - jquery向表中插入一行后如何保持css样式