我通过在线书籍#34; 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;
}
正如您所看到的,它遍历一个数组,并根据第一个对象具有参数的次数输出另一个数组: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
的链接感谢您的帮助!
答案 0 :(得分:2)
在原始代码中,这个:
if (entry.squirrel) index += 2;
table[index] += 1;
实际上是两个不相关的陈述:
if (entry.squirrel) { index += 2; }
table[index] += 1;
它刚刚缩进。在Javascript中,与大多数C派生语言一样,if
之后的单个语句可以构成条件为真时要执行的块。要包含多个语句,必须使用大括号。
答案 1 :(得分:2)
如果没有括号的 if 语句只会在满足条件时执行下一条指令。
您提供的第一个代码段包含令人困惑的缩进,因为它表明以下指令(&#34; table [index] + = 1;&#34;)是条件语句的一部分,但在JavaScript中缩进是无关紧要的。< / p>
所以实际上,如果你不使用括号,那么第一个分号表达式就是闭括号。
正确缩进代码:
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 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;
}
答案 2 :(得分:1)
您已将表[index] + = 1;&#39;在if语句中,它之前没有。原始代码中的标签给出了一种误导性的印象,但原始的未加括号的if语句仅包含&#39;周围&#39;指数+ = 2;&#39;
答案 3 :(得分: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;
table [index]行不属于if语句。