【发布时间】:2014-10-10 20:55:05
【问题描述】:
我正在完成第 4 章 Eloquent Javascript 中第一个示例的结尾。这是完整的代码(这是我有疑问的最后一段,但我附上了第一部分以供参考)。
var journal = [];
function addEntry(events, didITurnIntoASquirrel) {
journal.push({
events: events,
squirrel: didITurnIntoASquirrel
});
function phi(table) {
return (table[3] * table[0] - table[2] * table[1]) /
Math.sqrt((table[2] + table[3]) *
(table[0] + table[1]) *
(table[1] + table[3]) *
(table[0] + table[2]));
}
function hasEvent(event, entry) {
return entry.events.indexOf(event) != -1;
}
function tableFor(event, journal) {
var table = [0, 0, 0, 0];
for (var i = 0; i < journal.length; i++) {
var entry = journal[i], index = 0;
if (hasEvent(event, entry)) index += 1;
if (entry.squirrel) index += 2;
table[index] += 1;
}
return table;
}
function gatherCorrelations(journal) {
var phis = {};
for (var entry = 0; entry < journal.length; entry++) {
var events = journal[entry].events;
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (!(event in phis))
phis[event] = phi(tableFor(event, journal));
}
}
return phis;
}
var correlations = gatherCorrelations(JOURNAL);
console.log(correlations.pizza);
我的问题是:
-
.events in 的目的是什么
var events = journal[entry].events;
它会以递归的形式调用自身吗?如果是,为什么?难道我们不能只有 journal[entry] 并且该函数将运行从 tableFor 函数调用条目吗?它是否以一种重要的方式回调了 AddEntry 函数(其中 events 变量被建立)?
-
(!(event in phis))的目的是什么。
我将其解读为:如果 phis 中的事件为真,则将其翻转为不为真,然后触发必要的 phi 计算。去掉 不是更有意义! (不等于)还是那段代码?如果我们已经有一个 for 循环,那么函数是否会在日志的最大长度之前运行并停止?
【问题讨论】:
标签: javascript