Explanation
The problem is that you are not returning the result of the recursive call, so it is undefined when the entire call is mergeresolved.
Let me do it step by step:
- With arguments
"AAA"and "BBB"their lengths not equal 0, go to another. Otherwise there str3is "AB", call merge("AA", "BB"). "AA" "BB" 0, . str3 "ABAB", merge("A", "B")."A" "B" 0, . str3 "ABABAB", merge("", "").- 0. if,
str3 . merge("", "") ( "ABABAB" ), , merge("A", "B"), , "" .- ,
merge("A", "B"), else. , . , undefined. "" , merge("AA", "BB"), . - ,
merge("AA", "BB"), else. , . , , undefined. "" , merge("AAA", "BBB"), . - ,
merge("AAA", "BBB"), else. , . , , undefined. , - merge("AAA", "BBB") undefined.
TL; DR: else, str3 merge("A", "B"). merge("A", "B") , undefined. - return else, undefined. , undefined.
, return . , , "" str3 - "ABABAB", undefined.
, 6, 7 8 return. , undefined, str3. , merge("", "") "ABABAB", str3. merge("A", "B") - return, merge("AA", "BB") .., , str3.
:
var str3 = "";
function merge(str1, str2) {
if(str1.length == 0 || str2.length == 0) {
console.log(str3);
return str3;
} else {
str3 = str3 + str1.substring(0, 1) + str2.substring(0, 1);
return merge(str1.substring(1, str1.length), str2.substring(1, str2.length));
}
}
var mergedString = merge("AAA","BBB");
Hide resultmergedString undefined. , , str3, mergeString.