簡體   English   中英

Return返回Javascript中未定義的返回

[英]Return returns undefined in Javascript

我需要編寫一個程序來遍歷Java迷宮,其中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";
            }
        }
}

輸入

arr = [[3, 0, 0, 0], [0, 3, 3, 0], [0, 1, 0, 3], [0, 2, 3, 3]];
answer = sourceDes(arr);
answer;

當console.log()時輸出

yes

返回值並在功能上應用console.log時輸出

undefined

您在sourceDes函數中缺少return語句

return語句應同時在兩個函數中,否則返回undefined

在Javascript中,當您在函數內省略return語句時,將假定為隱式的return undefined 這就是為什么您獲得此返回值。

我檢查了您的代碼,並在您的sourceDes函數中發現了一個錯誤。 您沒有在函數中定義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;
        }
    }
}

當循環最后一次運行時,您的if條件變為false,這就是為什么要重新定義undefined的原因 檢查下面的代碼,我添加了else部分,如果條件為false,則返回No。

 arr = [[3, 0, 0, 0], [0, 3, 3, 0], [0, 1, 0, 3], [0, 2, 3, 3]]; 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; } else{ return "No"; } } } 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"; } } } answer = sourceDes(arr); document.write(answer); 

使用以下代碼段。 我添加了變量並在循環中設置了值,並在函數末尾返回了結果變量。

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";
            }
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM