我只是漫无目的地玩,而偶然发现了我没有得到的东西。
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
...?我可能只有选择性的失明攻击,但我真的看不到范围误入歧途。
最佳答案
您的函数返回未定义,并且您正在将其结果分配给结果变量。
您应该从函数返回结果:
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);
关于javascript - 递归时的范围怪异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12553817/