我只是漫无目的地玩,而偶然发现了我没有得到的东西。

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/

10-12 00:04