【问题标题】:Why does method return 0?为什么方法返回0?
【发布时间】:2013-04-24 01:01:02
【问题描述】:

使用下面的对象和方法,为什么console.log(FizzBuzzPlus.getFizzBuzzCount(20))会打印0?

var FizzBuzzPlus = {
    isFizzBuzzie: function(a) {
        if(a%5 === 0 || a%3 === 0) {
            if (a%5 === 0 && a%3 === 0) {
                return false;
            }
            return true;
        } else {
            return false;
        }
    },

    isFizzBuzzieChecker: function(c) {
        var theFizzBuzzes = [];
        for (var i = 0; i < c; i++) {
            if (this.isFizzBuzzie(i)) {
                theFizzBuzzes += i + " ";
            }
        }
        return theFizzBuzzes;
    },

    getFizzBuzzSum: function(b) {
        var sum = 0;
        for (var i = 0; i < b; i++) {
            if (this.isFizzBuzzie(i)) {
                sum += i;
            }
        }
        return sum;
    },

    getFizzBuzzCount: function(c) {
        var count = 0;
        for (var i = 0; i < c; i++) {
            if (this.isFizzBuzzie(i)) {
                count++;
            }
        return count;
        }
    }
};

console.log(FizzBuzzPlus.isFizzBuzzieChecker(20));
console.log(FizzBuzzPlus.getFizzBuzzSum(20));
console.log(FizzBuzzPlus.getFizzBuzzCount(20));

有些人可能会认出这是 Codecademy 的 FizzBu​​zz。我正在使用他们的在线 JavaScript 编辑器玩这个对象。该方法的打印结果始终为 0。它应该返回 0 到 20 之间可被 3 或 5 整除的数字数量,但不能同时被 3 和 5 整除。

【问题讨论】:

  • 谢谢。语法错误是原始代码中没有的错字。移动了返回语句。现在可以正常工作了。
  • 那么你应该改正你的问题中的错字;)

标签: javascript object methods


【解决方案1】:

此时,在您的代码中,您的 return 语句位于您的 for 循环中:

getFizzBuzzCount: function(c) {
    var count = 0;
    for (var i = 0; i < c; i++) {
        if (this.isFizzBuzzie(i)) {
            count++;
        }
    return count; //<-- this return is INSIDE the for loop
    }
}

return 移到for 循环之外:

getFizzBuzzCount: function(c) {
    var count = 0;
    for (var i = 0; i < c; i++) {
        if (this.isFizzBuzzie(i)) {
            count++;
        }
    }
    return count; 
}

小提琴:
http://jsfiddle.net/hVf9n/

【讨论】:

    【解决方案2】:

    你在for循环中有return语句,isFizzBuzzieChecker中也有语法错误,if条件中缺少结束)

    getFizzBuzzCount: function(c) {
        var count = 0;
        for (var i = 0; i < c; i++) {
            if (this.isFizzBuzzie(i)) {
                count++;
            }
        }
        return count;
    }
    

    演示:Fiddle

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2022-01-23
      • 1970-01-01
      • 2011-03-01
      • 2011-07-01
      • 2011-01-17
      相关资源
      最近更新 更多