在递归中使用全局变量是一种好的做法吗
Is it good practice to use global variables in recursion
我正在帮助一个人完成他的学校作业——我们正在尝试编写递归函数(如果重要的话——用PHP或JavaScript)。
我很了解递归的原理,但我从来没有从"学术"的角度写过这些。
使用全局变量来存储结果是否是一种好的做法,比如:
var results = [];
var rec = function(a) {
...
if (match)
results.push(someValue);
}
或者我应该使用return来收集所有这些结果(这会更加困难)?
最好尽可能少地使用全局变量,最好不要使用1。
为了避免递归中需要全局变量,可以使用一个使用闭包的内部函数:
var rec = function(a) {
var someValue = [];
function dorec() {
// stuff happens
if (match)
results.push(someValue);
}
}
dorec();
}
1Douglas Crockford状态
所有变量在使用前都应声明。JavaScript不需要这样做,但这样做会使程序更容易阅读,并使更容易检测可能成为隐含的未声明变量全球。不应使用隐含的全局变量。使用全局变量应该最小化。
为了扩展现有的注释并给您一个具体的例子,下面是将偶数递归添加到给定数组的代码:
var match;
var rec = function(a, res) {
if (a < 0) {
return res;
}
match = a % 2 == 0;
if (match) {
res.push(a);
}
return rec(a - 1, res);
}
var results = rec(10, []);
alert(results);
和小提琴:http://jsfiddle.net/xukukggL/
相关文章:
- 数组在递归方法中设置为null
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- 有没有一种方法可以在Javascript中进行可变递归currying
- 有没有一种方法可以用步骤递归调用jQuery animate()
- 如何使用javascript在递归对象中找到基于一键的树级别
- 在JavaScript中,从一组数组递归地构建一个字典/嵌套对象
- Javascript 这个关键字在原型函数中的递归执行一次,然后未定义
- 递归 JS 函数每秒错过一次循环
- 递归地获取Javascript中一组数字的所有可能组合
- 在递归中使用全局变量是一种好的做法吗
- 如何在JavaScript中一段时间后停止递归函数
- 在JavaScript中从多级数组递归生成一级数组
- 如何递归地查找字符串中的一组字符
- Javascript:在递归函数中初始化变量一次(如静态变量)
- Javascript:在一段时间后中断递归调用
- 我怎样才能递归和异步地构建一棵未知大小的树
- 如何递归地列出对象属性,并将它们全部列在'一层深'-对象中