为什么方法返回0?

时间:2013-04-24 01:01:02

标签: javascript object methods

使用下面的对象和方法,为什么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.

2 个答案:

答案 0 :(得分:2)

在您的代码中,您的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/

答案 1 :(得分:0)

你在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