Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回在Javascript中未定义_Javascript - Fatal编程技术网

返回在Javascript中未定义

返回在Javascript中未定义,javascript,Javascript,我需要编写一个程序来遍历Javascript中的迷宫,其中1是源,2是目标,3是路径,0是墙。下面是我写的代码。代码是正确的,但我只在使用console.log()时得到答案,而不是在返回字符串yes或no时得到答案。为什么会这样 function sourceDes(arr) { for (var i=0;i<arr.length;i++) { for (var j=0;j<arr[i].length; j++) { if (arr[i][j] == 1)

我需要编写一个程序来遍历Javascript中的迷宫,其中1是源,2是目标,3是路径,0是墙。下面是我写的代码。代码是正确的,但我只在使用console.log()时得到答案,而不是在返回字符串yes或no时得到答案。为什么会这样

function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
            traverse(i,j);
            break;
        }
    }
}

function traverse(rowPos, colPos) {
            if (arr[rowPos][colPos] == 2) {
                console.log("yes");
                // return "Yes";
            }
            else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
                arr[rowPos][colPos] = 9;

                if(rowPos < arr.length - 1) {
                    return traverse(rowPos + 1, colPos);
                }
                if(colPos < arr[rowPos].length - 1) {
                    return traverse(rowPos, colPos + 1);
                }
                if(rowPos > 0) {
                    return traverse(rowPos - 1, colPos);
                }
                if(colPos > 0) {
                    return traverse(rowPos, colPos - 1);
                }
            }               
            else if (arr[rowPos][colPos] == 0) {
                console.log("No");
                // return "No";
            }
        }
}
当console.log()时输出

返回值并对函数应用console.log时的输出

undefined

sourceDes
函数中缺少return语句

两个函数中都应该有return语句,否则在Javascript中返回undefined语句

,如果省略函数中的return语句,则假定为隐式的
return undefined
。这就是为什么会得到这个返回值

我检查了您的代码,发现sourceDes函数中有一个bug。您没有在函数中定义return语句

function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
            traverse(i,j);
            break;
        }
    }
}
function sourceDes(arr) {
var result='';
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
           result= traverse(i,j);
            break;
        }
    }
 return result;
}

function traverse(rowPos, colPos) {
            if (arr[rowPos][colPos] == 2) {
                //console.log("yes");
                 return "Yes";
            }
            else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
                arr[rowPos][colPos] = 9;

                if(rowPos < arr.length - 1) {
                    return traverse(rowPos + 1, colPos);
                }
                if(colPos < arr[rowPos].length - 1) {
                    return traverse(rowPos, colPos + 1);
                }
                if(rowPos > 0) {
                    return traverse(rowPos - 1, colPos);
                }
                if(colPos > 0) {
                    return traverse(rowPos, colPos - 1);
                }
            }               
            else if (arr[rowPos][colPos] == 0) {
                //console.log("No");
                 return "No";
            }
        }
}
函数源DES(arr){

对于(var i=0;i使用以下代码段。我在循环中添加了变量并设置了值,并在函数末尾返回了结果变量

function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
            traverse(i,j);
            break;
        }
    }
}
function sourceDes(arr) {
var result='';
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
           result= traverse(i,j);
            break;
        }
    }
 return result;
}

function traverse(rowPos, colPos) {
            if (arr[rowPos][colPos] == 2) {
                //console.log("yes");
                 return "Yes";
            }
            else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
                arr[rowPos][colPos] = 9;

                if(rowPos < arr.length - 1) {
                    return traverse(rowPos + 1, colPos);
                }
                if(colPos < arr[rowPos].length - 1) {
                    return traverse(rowPos, colPos + 1);
                }
                if(rowPos > 0) {
                    return traverse(rowPos - 1, colPos);
                }
                if(colPos > 0) {
                    return traverse(rowPos, colPos - 1);
                }
            }               
            else if (arr[rowPos][colPos] == 0) {
                //console.log("No");
                 return "No";
            }
        }
}
函数源DES(arr){
var结果=“”;
对于(变量i=0;i 0){
返回导线(rowPos、colPos-1);
}
}               
否则如果(arr[rowPos][colPos]==0){
//控制台日志(“否”);
返回“否”;
}
}
}

您将console.log包装在哪个函数中?是否尝试使用return?取消对代码中注释的行的注释,然后对console.log行进行注释?是否应在sourceDes函数中返回遍历函数?