[英]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.