影响父方法变量的递归调用
Recursive call affecting parent method variables?
我正在构建嵌套注释。我的AJAX脚本得到一个如下的评论列表,并将它们展开-
if (xmlhttp.readyState == 4 || myOb.readyState == "complete") {
// EVAL
var comments = eval('(' + xmlhttp.responseText + ')');
// POPULATE
var comm = "<ul>";
for(i = 0; i < comments.length; i++) {
if(comments[i].replyto == 0) {
comm = comm + expand(property, comments, i);
}
}
comm = comm + "</ul>";
// DISPLAY
document.getElementById("comments").innerHTML = comm;
}
这里,expand
函数是递归的,并且似乎引起了麻烦-
function expand(property, comments, k) {
var comm = "";
// PRINT MAIN COMMENTS
comm = comm + "<li>";
// print otherparent comment data
// replies
comm = comm + "<ul>";
for(i = 0; i < comments.length; i++) {
// is a reply?
if(comments[i].replyto == comments[k].id) {
comm = comm + expand(property, comments, i);
}
}
comm = comm + "</ul>";
comm = comm + "</li>";
return comm;
}
这个脚本最终只给了我第一个comments
数组元素(以及它各自的子注释)。但是,如果我删除递归代码,我就不会面临这个问题(同样,我也不会没有得到任何子评论)。。
function expand(property, comments, k) {
var comm = "";
// PRINT MAIN COMMENTS
comm = comm + "<li>";
// print otherparent comment data
// replies
comm = comm + "<ul>";
/*
for(i = 0; i < comments.length; i++) {
// is a reply?
if(comments[i].replyto == comments[k].id) {
comm = comm + expand(property, comments, i);
}
}
*/
comm = comm + "</ul>";
comm = comm + "</li>";
return comm;
}
我在eval
函数中设置了两个警报,在expand
调用前后各一个:
for(i = 0; i < comments.length; i++) {
if(comments[i].replyto == 0) {
alert(i);
comm = comm + expand(property, comments, i);
alert(i);
}
}
两者都给了我不同的CCD_ 5值。我做错了什么?
感谢
您忘记将"i"设为局部变量:
for(var i = 0; i < comments.length; i++) {
这是非常重要的。
相关文章:
- 为什么setTimeout适用于无休止的递归调用
- 有没有一种方法可以用步骤递归调用jQuery animate()
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 递归调用异步函数
- 递归调用相同的函数
- 计算一个函数在JS中被递归调用的次数
- 如何在 Javascript 中递归调用存储在变量中的函数
- 如果回调调用封闭函数,它是否被称为递归调用
- 无法从响应的结束事件中对 Http.Request 进行递归调用
- JavaScript中的递归调用不起作用
- KO 计算递归调用
- 删除数组递归调用模式中的项
- 无法在 Javascript 中进行递归调用
- 如何递归调用承诺函数
- Javascript 堆栈和递归调用
- 无法在 javascript 中使用 settimeout 递归调用函数
- 原型函数中的递归调用
- 在 Javascript 中递归调用“父”构造函数
- AngularJS:使用$timeout递归调用函数时的RangeError
- JavaScript 理解递归调用代码清理中的上下文,没有“with”关键字