我编写了一个函数来计算函数的模数,但是当我在控制台中运行它时,它总是返回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) }
答案 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)
因为你的代码没有从循环中返回值。
试试这个:
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;