Como a maior parte das pessoas eu tambem tentei entender o codigo na cabeça, mas essa forma não foi melhor para min. Na forma que eu fiz, fui colocando comentarios do lado de cada função desecrevendo que cada uma fazia:
`
function pulaLinha() {
document.write("<br>");
}
function mostra(frase) {
document.write(frase);
pulaLinha();
}
function a(texto) {
return "(" + texto + ")"; // **( texto )** -> Essa function vai retornar o paramêtro entre parenteses.
}
function b(texto) {
return "@" + texto + "@"; // **@ texto @ ** -> Essa function vai retornar o paramêtro entre @'s.
}
function c(nome, sobrenome) // -> Essa function é usada para receber o nome e o sobrenome.
{
return b(nome + " " + a(sobrenome));
}
'
- Agora vamos entender o que cada function faz por partes :
' function C ( nome e sobrenome entre parênteses) OK - Porem dentro da function C antes de retornar o nome e sobrenome entre perênteses aparece - function B @ + texto +@ que concatena @ no começo e no fim do texto, como a function B esta fora dos parênteses na function C, por enquanto temos o seguinte resultado: @(nome + " " A(sobrenome))@;
' Agora notamos que ao concatenar o sobrenome vimos que a function A "(" +texto + ")"e concatenada junto com o sobrenome, e a function A coloca parenteses entre o texto,temos o seguinte resultado:
' @(nome+ "(sobrenome))@
' var resultado = c("Flávio", "Almeida"); -> Agora vamos colocar o que a variável resultado atribuiu a function C.
mostra(resultado);
' @Flavio(Almeida)@
' - Uma dúvida que eu tive era do porque o Flavio já não começava com parenteses já que dentro da variável na function c ele tem parentes. E ele não começa com parenteses porque na variável ele esta entre parenteses, para mostrar que "Flavio" e o 1 parâmetro da function c e "Almeida" e o 2 parâmetro.
Pra min ficou mais claro dessa forma.