几乎相同的代码,但答案非常不同

Sha*_*pta 3 javascript

我正在用JavaScript编写一个程序来计算6位数的数字,其前3位数的总和等于最后3位数的总和.所以我为问题写了两个不同的解决方案,尽管只有一个会返回正确答案.
我还编写了一个函数sumOfDigits(),它只是计算传递给它的数字的总和.此功能不在这里写,但它的工作正确.


function count1() {
    total=0;
    for (i = 100000; i <= 999999; i+=1) {
         part = i % 1000;
         if ((sumOfDigits(i-part)) == ((sumOfDigits(part)))) {
             total+=1;
         }
     } return total;
}
Run Code Online (Sandbox Code Playgroud)
function count2() {
    array = [];
    for (i = 100000; i <= 999999; i+=1) {
        part = i % 1000;
        if ((sumOfDigits(i-part)) == ((sumOfDigits(part)))) {
            array.push(i);
        }
    } return array;
}
Run Code Online (Sandbox Code Playgroud)

count1()函数无法正常工作并返回28作为答案,而count2()返回数组的函数返回长度为50412的数组,这是正确的答案.有人可以告诉我为什么第一个功能无法正常工作.
正在count1运行的功能的屏幕截图. count1()函数的屏幕截图.

Mar*_*tos 5

total在执行中使用了sumOfDigits()吗?我猜这两个函数都使用相同的全局total.

您应该var首次使用所有局部变量的前缀,以便它们不被视为全局变量,例如:

var total = 0;
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚证实了这一点.如果sumOfDigits()使用全局total,则count1()返回28.

  • http://stackoverflow.com/questions/500431/javascript-variable-scope更多abuot变量 (2认同)