我正在通过在线书籍“Eloquent JavaScript”学习 Javascript - 顺便说一句,这是一个很棒的资源。我在“数据结构”一章中遇到了这个函数:
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;
}
如您所见,它遍历一个数组,并根据第一个对象具有 argument:event 的次数输出另一个数组。我像这样重写了这个略有不同......
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;
}
唯一的变化是 if 语句周围的括号,我认为这是最佳实践。但是,它输出与第一段代码不同的值。为什么会这样?是否有一些我不明白的范围问题?如果你不知道我在说什么,这里是本书章节的链接:Eloquent JavaScript 以及对象 JOURNAL 的链接:JavaScript Object
感谢您的帮助!
最佳答案
在原始代码中,这是:
if (entry.squirrel) index += 2;
table[index] += 1;
实际上是两个不相关的语句:
if (entry.squirrel) { index += 2; }
table[index] += 1;
它的缩进很严重。在 Javascript 中,与大多数 C 派生语言一样,if
之后的单个语句可以构成条件为真时要执行的 block 。要包含多个语句,必须使用大括号。
关于javascript - 为什么这两段代码返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105858/