使用JavaScript计算模数返回undefined

时间:2014-10-16 15:15:00

标签: javascript

我编写了一个函数来计算函数的模数,但是当我在控制台中运行它时,它总是返回undefined。如果我使用console.log,我可以看到它正在计算正确的值。

function modulo(sum, divider){ 
  function loop(difference){ 
    if(difference < divider){ 
     console.log(difference)
     return difference
    } else { 
       setTimeout(loop(difference - divider), 0)
    } 
  } 
  
  return loop(sum - divider) 
}

modulo(8, 5) // 3

我想要的是返回答案 例如

var result = modulo(8, 5) // 3

更新

这个问题的更好解决方案是

modulo = function (x,y){ return x - y * Math.floor(x/y) }

3 个答案:

答案 0 :(得分:3)

您不需要为此创建新函数,JavaScript已经拥有它自己的模数运算符:%

8 % 5
-> 3

如果你真的想把它变成一个函数,你可以简单地说:

function modulo(sum, divider) {
    return sum % divider;
}
modulo(8, 5);
-> 3

答案 1 :(得分:2)

要回答原始问题,setTimeout是异步的,并且您的loop函数返回undefined,因此您未定义。要使其达到您想要的效果,请直接致电loop,或使用承诺。

但另一方面,即使你要实现模数,这也是一种糟糕的方法。改为使用更好的division algorithms

答案 2 :(得分:0)

因为你的代码没有从循环中返回值。

试试这个:

&#13;
&#13;
function modulo(sum, divider) {
  function loop(difference) {
    if (difference < divider) {
      return difference;
    } else {
      return loop(difference - divider);
    }
  }

  return loop(sum - divider);
}

alert(modulo(8, 5));
&#13;
&#13;
&#13;