在递归中使用全局变量是一种好习惯吗

use*_*401 4 javascript php algorithm recursion

我正在帮助某人完成他的学校作业 - 我们正在尝试编写递归函数(如果重要的话 - 使用 PHP 或 JavaScript)。

我非常了解递归原理,但我还没有从“学术”的角度写过任何这些原理。

使用全局变量来存储结果是一种好习惯,例如:

var results = [];

var rec = function(a) {
    ...
    if (match)
        results.push(someValue);
}
Run Code Online (Sandbox Code Playgroud)

或者我应该使用 return 将所有这些结果收集在一起(这会困难得多)?

Koo*_*Inc 5

尽可能少地使用全局变量是一种很好的做法,最好不使用1

为了避免递归中需要全局变量,您可以使用使用闭包的内部函数:

var rec = function(a) {
    var someValue = [];
    function dorec() {
      // stuff happens
      if (match)
        results.push(someValue);
      }
    }
    dorec();  
}
Run Code Online (Sandbox Code Playgroud)

1个 道格拉斯·克罗克福德状态

所有变量都应该在使用前声明。JavaScript 不需要这样做,但这样做会使程序更易于阅读,并且更容易检测可能成为隐含全局变量的未声明变量。永远不应该使用隐含的全局变量。应尽量减少使用全局变量。