为什么这两段代码返回的值不同
Why are these two pieces of code returning different values?
我正在通过在线书籍《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对象的链接
谢谢你的帮助!
在原始代码中,这是:
if (entry.squirrel) index += 2;
table[index] += 1;
实际上是两个不相关的陈述:
if (entry.squirrel) { index += 2; }
table[index] += 1;
它只是缩进得很厉害。在Javascript中,与大多数C派生语言一样,当条件为true时,if
之后的单个语句可以构成要执行的块。若要包含多个语句,必须使用大括号。
不带括号的if语句只有在满足条件时才会执行下一条指令。
您提供的第一个代码段包含令人困惑的缩进,因为它表明以下指令("table[index]+=1;")是条件语句的一部分,但在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;
}
带支架
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]+=1;'在if语句中,在以前没有的地方。原始代码中的标签显示给人一种误导性的印象,但原始的无包装if语句只"包装"在"index+=2;"周围
这是因为你把括号放错了地方。应该是这样的:
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语句。
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 返回按钮代码段的Jquery冲突
- .val()返回未定义的.text返回随机代码
- 如何使HTML5颜色选择器返回颜色名称而不是颜色代码
- 为什么这个代码返回NaN
- 这个代码会返回false吗
- 如何从一系列级联异步代码中返回值
- 角度方法返回未绘制的代码
- 我可以获得用Ajax调用的函数的返回代码吗
- 我无法从javascript函数中获取返回代码
- 无法获取输出.返回代码206.缺少值
- 在 cordova 项目中,我正在使用文件传输插件上传个人资料照片,它总是返回代码 1 错误
- AngularJS: $sce.trustAsHtml 以文本形式返回代码
- 带有返回代码和返回消息的 PHP 函数,以供参考
- Dojo.request for iteminfo-在Fiddler中返回代码200,但在浏览器中返回代码0
- 解析云代码:beforeSave查询返回代码不起作用
- AJAX返回代码200,但引发错误
- XMLHttpRequest运行返回代码
- ASP.NET:如何传递窗口.返回C#代码的值
- NodeJS: HTTP GET返回代码而不是JSON对象