【发布时间】:2015-10-13 03:08:00
【问题描述】:
我是一个 javascript 新手,我不知道为什么变量 o 存在于以下代码中:
var data = [ {"name":"alice", "group":1}, {"name":"bob", "group":2} ];
function getGroup(n) { return n.group; }
function network(nodes, index) {
var gc = {};
nodes.forEach(function(n) {
var i = index(n), o;
if (condition) {
o = gc[i] || (gc[i] = {x:0,y:0,count:0});
o.x += n.x;
o.y += n.y;
o.count += 1;
}
});
}
var net = network(nodes, getGroup)
在我看来,network 函数中的迭代器最好这样写:
function network(data, index) {
var gc = {};
nodes.forEach(function(n) {
var i = index(n);
if (condition) {
gc[i] = gc[i] || (gc[i] = {x:0,y:0,count:0});
gc[i].x += n.x;
gc[i].y += n.y;
gc[i].count += 1;
}
});
}
我认为第二个循环是等价的,它消除了一个变量(而且我更容易阅读)。第一个版本是否遵循 javascript 中的一些推荐做法?我可以想象在迭代器中包含var o; 以减小其范围是一种很好的做法,但在这种情况下,o 仅指代gc[i] 已经引用的对象。为什么不直接消除它?
【问题讨论】:
-
请重新表述您的问题。我认为它不应该包含“ANSWER”,因为这是本网站的目的(Q&A)。此外,以谈论缓存和性能的方式重新表述它,因为现在标题看起来像一个调试问题。为什么约定是一个标签?缓存呢?
-
我知道开放式讨论很糟糕,但我不认为“是否有像 python PEP 这样的最佳实践的主要来源”(我现在已经删除)是一个开放式问题.
-
这可能不是开放式的,但它违反了另一个规则(来自here 的#4):“要求我们推荐或查找书籍、工具、软件库的问题、教程或其他场外资源与 Stack Overflow 无关” 坚持询问编程问题本身。
-
一手资料可以看my search query for JS style guides。 Mozilla Dev Network 有很好的网络技术指南。此外,优秀的书籍是 Eloquent JS。如需其他资源,请查看here 和here。
-
您不应使用新问题来编辑您的问题。如果您有新问题,您应该发布一个新问题。您已经接受了答案,如果您更改问题,则发布的答案毫无意义。此外,您将无法为新问题选择新答案。
标签: javascript caching