I try to understand this one. It is an example from advanced javascript by John Resig.
function yell(n) {
return n > 0 ? yell(n-1) + "a" : "hiy";
}
alert( yell(4) );
As a beginner I somehow would use a temporary variable to save the string and concatenate it to the final word (here hiyaaaa).
I cannot understand how this advanced example is working. Where the concatenation happens and how? Why is "hiy" before the "a"'s at the end, if it is added last?
Let's walk through this...
This is just a function declaration and nothing happens when it is reached (besides the function being parsed into memory):
function yell(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
Now, the function is invoked and the number 4
is passed into it:
alert( yell(4) );
The 4
is received as the value of the argument n
and then this line:
return n > 0 ? yell(n-1) + "a" : "hiy";
...first checks n
to see if it is greater than 0
, which 4
is, so the true
part of the ternary expression is carried out:
yell(n-1) + "a"
This makes a recursive call to yell
and passes 3
(n - 1) to the function. Note that nothing is returned from the first call to yell
yet, because flow control has been passed over to the second occurrence of yell
.
The function runs again with 3
as n
and again hits the true
part of the ternary, causing the number to be reduced by one and then yell
is called again.
This will continue until yell
is recursively called with 0
as the value passed into it, at which time the false
part of the ternary expression is invoked and hiy
is returned and the aaaa
from the recursive calls is concatenated onto that.
function yell(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
alert( yell(4) );