javascript - 为什么这两段代码返回不同的值?

标签 javascript if-statement scope

我正在通过在线书籍“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/

相关文章:

Java try-catch-finally 作用域,确定变量是否被使用

javascript - 如何使用 JQuery UI 在模态对话框中显示 javascript 图形?

javascript - iOS定位修复

javascript - 在日期选择器上使用 keyPressing 进行搜索(element-ui)

java - 未找到变量,即使它位于上面的类中

python过滤字符串只显示少于2个字的标签

javascript - 范围问题(NodeJS - "request"包)

javascript - 当服务器需要访问套接字之类的东西时,browserify 怎么可能让服务器代码在浏览器中运行?

java - 在 if 语句的方法中比较数组列表的元素

Javascript - 无法理解闭包