递归函数调用如何在循环中工作?

Jim*_*mmy 1 coldfusion recursion loops for-loop

我有一个函数,其中有一个调用函数的循环.

function displayItem(item, isChild)
{
    if (isChild)
    {
        writeOutput('<li>' & item.name & '</li>');
    }
    else
    {
        writeOutput('<li>' & item.name);
    }
    try
    {
        if (item.hasChild)
        {
            writeOutput('<ul>');
            numberOfItems = item.numChildren;
            for (x=1;x LT numberOfItems;x++)
            {
                displayItem(item.child[x], true);
            }
            writeOutput('</ul>');
        }
    }
    catch(Exception e){}
    writeOutput('</li>');
} 
Run Code Online (Sandbox Code Playgroud)

执行该函数后,循环继续执行该执行的x值,而不是从之前的位置开始.

例如:x为3. displayItem传递"item.child [3]"并为true.它通过函数工作,进入循环,执行循环到x = 4,然后退出循环.函数结束并(根据我的理解)返回到x应为3的点.而不是从3中取出,添加一个(使其成为4)然后再次执行循环,它从4中取出(值从"内部"递归地称为循环).

我知道这听起来不连贯,但我想不出任何其他方式来解释它.

有什么我做错了,或者这只是生活中的一个事实,我必须解决一些问题?

更新: 看了更多,看起来好像最早的循环提前退出.使用局部变量'x'修复了计数问题,但是如果查看上一个示例,则循环只退出4.它在条件满足之前离开.有任何想法吗?

rei*_*ost 7

你忘了 在函数中使x为 local.

不要使用全局变量.像瘟疫一样避免它们.