【问题标题】:javascript nested for loops not iterating all the way throughjavascript嵌套for循环不会一直迭代
【发布时间】:2017-10-01 21:47:49
【问题描述】:

我试图在 HTML 画布上放置一个circle,该画布在(x, y) 上测量1920 * 850,其中x50 而变化,y75 而变化。我设置了一个嵌套的for 循环来完成此操作,但很快发现它不起作用,即循环在某个点后停止。然后我做了一些没有circle放置代码的简单嵌套for循环的场景,发现它们在某个点之后也停止了。

在下面的代码中,我有一个简单的嵌套for 循环,在运行它时,它会在i = 14j = 19 时停止。在console 中,它只是声明'Javascript 控制台中发生错误

for (var i = 0; i < 20; i++) {
  j = 0
  for (var j = 0; j < 70; j++) {
    console.log('i: ' + i + ' j: ' + j);
  }
}

这里有什么根本错误吗,这似乎是一段很简单的代码,但我不知道为什么它会停止。

有什么想法吗?

【问题讨论】:

  • 对我来说工作得很好。究竟是什么错误?
  • 为什么j = 0 两次?
  • 好像你没有放完整的代码,因为你的 console.log 工作正常
  • “它在 i = 14 和 j = 19 时停止。在控制台中它只是指出“Javascript 控制台中发生错误” 无法重现。你可以创建一个 stacksn-ps 来重现吗?见stackoverflow.com/help/mcve
  • 嗨弗兰克,我在其他一些帖子中读到需要重新初始化内部循环,这就是我添加它的原因,它没有多大意义,但我是 javascript 新手,所以我想也许 for 循环的工作方式与其他语言(如 vb.net 或 c#)中的工作方式略有不同。这就是整个代码 sn-p。

标签: javascript html for-loop nested-loops


【解决方案1】:

我已经解决了这个问题。我发现了一个帖子,其中控制台日志在 999 之后没有显示 for 循环的输出。此外,在我的初始 javascript 循环中生成圆圈时出现错误,在绘制每个圆圈后我没有使用 beginPath,那就是给出非常混乱的结果。

I.E. Console log with for loop

查看此内容后,我意识到我的代码可能仍在运行,但控制台没有显示它。所以我重写了代码来填充画布,就像我开始做的那样,它现在可以工作了。

$(document).ready(function ()
{
    var header = $('#header');
    var footer = $('#footer');

    var canvas = $('#myCanvas3')[0];
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight - header.height() - footer.height();
    var ctx = canvas.getContext('2d');


    var i = 0;
    var j = 0;

    for (var y = 1; y < 18; y++)
        {
            i = y * 50;
            for (var x = 0; x < canvas.width; x++)
            {
                j += 1;
                if (j == 50) {
                    console.log('x: ' + x);
                    ctx.beginPath();
                    ctx.fillStyle = 'red';
                    ctx.arc(x, i, 2, 0, Math.PI * 2, false);
                    ctx.fill();
                    j = 0;
                }
            }
        }

});

经验教训 - 在画布上绘制项目时确保在绘制新项目时使用 beginPath!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多