我只是漫无目的地玩,我偶然发现了一些我没有得到的东西。
var result;
// [.............. more stuff ..............]
function iterate(n) {
if (isDivisor(n)) {
if (checkIfPrime(n)) {
result = n;
return result;
}
iterate(n-2);
}
iterate(n-2);
}
result = iterate(startN)
console.warn("result is ", result)
//(isDivisor() and checkIfPrime() omitted because irrelevant to the problem
因此,代码工作正常,在限制意义上,一旦达到预期值,递归就会停止。但!在控制台中我得到undefined
。
result
是全局的,不会在任何函数内重新声明,特别是不在iterate()
内。 n
返回时iterate()
具有正确的值。 iterate()
可以访问全局范围(并且存在于其中)那么,怎么可能导致undefined
...?
我可能只是选择性失明发作,但我真的不知道范围误入歧途。
答案 0 :(得分:4)
您的函数返回undefined,并且您将其结果分配给结果变量。
您应该从函数返回结果:
function iterate(n) {
if (isDivisor(n)) {
if (checkIfPrime(n)) {
return n;
}
return iterate(n-2);
}
return iterate(n-2);
}
var result = iterate(startN);
console.log(result);
答案 1 :(得分:3)
如果Javascript函数退出而没有返回return语句,则其返回值将为undefined
。除非您isDivisor(n)
和checkIfPrime(n)
都是真的,否则这将发生在您的函数中。
也许你打算做
function iterate(n) {
if (isDivisor(n)) {
if (checkIfPrime(n)) {
result = n;
return result;
}
return iterate(n-2); // <----
}
return iterate(n-2); // <----
}
代替?