Javascript递归变量范围

标签 javascript variables recursion scope

如果我从深度 5 开始,我有一个递归函数(参见代码)

何时分支

execute(depth-1,x,y,width/2,height/2);

完成,深度不为5

execute(depth-1,midX,y,width/2,height/2);

但是1,它会产生困惑。您可以在这里查看算法:http://jsfiddle.net/g4p66/

它应该产生一些看起来像迷宫的东西(一个设计糟糕的迷宫,哈哈)

    function execute(depth,x,y,width,height){
        if(depth > 0){
            var midX = (x+width)/2;
            var midY = (y+height)/2;
            c.save();
            c.beginPath();
            c.moveTo(midX,midY);
            var from = Math.floor(Math.random()*4);
            if(from === 0){
                c.lineTo(midX,y);
            } else if(from === 1){
                c.lineTo(x+width,midY);
            } else if(from === 2){
                c.lineTo(midX,y+height);
            } else if(from === 3){
                c.lineTo(x,midY);
            }
            c.stroke();
            c.restore();
            execute(depth-1,x,y,width/2,height/2);
            console.log(depth);
            execute(depth-1,midX,y,width/2,height/2);
            execute(depth-1,x,midY,width/2,height/2);
            execute(depth-1,midX,midY,width/2,height/2);
        }
    }

编辑: 我错误地读取了 console.log,所以这让我很困惑。 主要原因是我的midX midY计算错误,应该是:

var midX = (x+(x+width))/2;
var midY = (y+(y+height))/2;

最佳答案

您没有遇到变量范围问题,而是解释日志时出现逻辑问题。

您看到的第一个 console.log 不是递归顶层的日志,而是最深层的日志,因为这是执行顺序。

发生的情况是这样的:

execute(5)
   execute(4)
      execute(3)
         execute(2)
            execute(1)
                execute(0) : depth <=0 -> return
            console.log(depth) -> logs 1

当您到达日志时,您可以检查自己的屏幕截图,看看您是否已深入递归:

enter image description here

关于Javascript递归变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23991123/

相关文章:

ios - 将变量从 iOS 传递到 watchOS

python - 嵌套操作的大 O 空间复杂度

haskell - 有没有更好的方法来编写 "string contains X"方法?

javascript - jquery Accordion 未通过动态创建进行初始化,不知道为什么

javascript - 动态插入 GA 跟踪 ID 代码会产生错误 "No HTTP response detected"Google 标记管理器

c# - 是否可以在 C# 中释放变量?

c - 马车抢劫(C语言)

javascript - 如何在 ASP.NET 页面中实现倒计时器?

javascript - Flowtype Javascript 推理未按预期工作

java - ToString 和输出问题