【问题标题】:variable gets reset when entering if statement?输入if语句时变量被重置?
【发布时间】:2017-02-10 13:18:31
【问题描述】:

我有代码循环遍历图像的所有像素,这包括 2 个 for 循环:

for (x = 1; x < img.width; x++) {
    visited[x] = new Array();
    for (y = 1; y < img.height; y++) {
        visited[x][y] = false;
        count = deepCount(img, x, y, visited, 0);
        if (count > spotSize) {
            spotX = x;
            spotY = y;
            spotSize = count;
        }
    }
}

此代码对所有单词进行编码,直到 if 语句。当我尝试获取变量 xy 并将它们的值放入新变量中时,它们给出了 1 的值。但是,如果我 console.log if 语句之前的值,它们会给出另一个数字。

似乎变量被重置为在 for 循环中赋予它们的值,因为当我将它们的起始值更改为 "0"xy 时都返回 0,因此我的问题是:

输入if语句时这些变量怎么可能重置为初始值?

【问题讨论】:

  • xy 是全局声明的。它们是否被 deepCount 覆盖?
  • 你能分享确切的(相关的)代码而不是描述吗? xy 不可能在 count &gt; spotSize 处更改它们的值。
  • 您需要提供真实的minimal reproducible example。创建一个的过程可能会为您确定问题。
  • @Mouser 它们不会被深度计数覆盖
  • 不要全局声明 x 和 y 并确保 deepCount 不会更改它们

标签: javascript if-statement for-loop


【解决方案1】:

我刚刚测试了一个类似的代码,包含 2 个 FOR 语句。工作正常,X 和 Y 按预期改变值。

function matrix() {

var mx = "";  
var xrand = Math.floor( Math.random() * 20 + 2 );
var yrand = Math.floor( Math.random() * 20 + 2 );  

for (x = 1; x < xrand; x++) {
    for ( y = 1; y < yrand; y++) {
        mx += "[" + x + "," + y + "]";
    }
    mx += "\n";
}
console.log(mx);
}

matrix()

您能否确定: 1. img.width 和 img.height 实际产生值 2.visited函数不改变X、Y值 3. 使用其他值而不是 X 或 Y 进行测试 4. 删除除 FOR 和 IF 语句之外的所有内容,但将 IF 中的条件替换为 if (true) 之类的其他内容,以进行测试

我想说的是,路径 X 和 Y 的某处被该代码中涉及的任何函数设置为给定值。

【讨论】: