Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

ALGUÉM ME EXPLICA,PF

Nesse primeiro código, o resultado mostra corretamente aquilo que tem que ser feito , que , no caso , é a média das idades

<meta charset="UTF-8">

<script>

  function pulaLinha(){

        document.write("<br>");
  }



    var ano = 2022;

         document.write('Lucas tem ' , (ano - 1999) , ' anos' , );

         pulaLinha();

         document.write('Katharine tem ' , (ano - 2001) , ' anos' ); 

         pulaLinha();

        ano = 2020

         document.write('Jubileu tem ' , (ano - 2000) , ' anos'); 

         var idadeLucas = 23;
         var idadeKhatarine =21;
         var idadeJubileu = 20;
         media = ( idadeJubileu + idadeKhatarine + idadeKhatarine)/3;

         pulaLinha()

         document.write('A média das idades é ' , Math.round(media));



</script>

Nesse segundo código eu acrescendo a segunda função para trocar o " docment.write" pela variável FRASE dentro da função MOSTRA O problema é que na hora do teste, ele só me mostrou as strings, ignorando todas as variáveis. Depois de muito tempo, resolvi trocar a vírgula pelo sinal de + na concatenação e deu certo.

<meta charset="UTF-8">

<script>

  function pulaLinha(){

        document.write("<br>");
  }


  function mostra(frase){


         document.write(frase)
  }

    var ano = 2022;

         mostra('Lucas tem ' , (ano - 1999) , ' anos' , );

         pulaLinha();

         mostra('Katharine tem ' , (ano - 2001) , ' anos' ); 

         pulaLinha();

        ano = 2020

         mostra('Jubileu tem ' , (ano - 2000) , ' anos'); 

         var idadeLucas = 23;
         var idadeKhatarine =21;
         var idadeJubileu = 20;
         media = ( idadeJubileu + idadeKhatarine + idadeKhatarine)/3;

         pulaLinha()

         mostra('A média das idades é ' , Math.round(media));



</script>

Quando troquei a virgula, deu certo, sendo que no primeiro código acima, sem a segunda função e com a virgula, estava dando certo. Queria saber o porque. Sei essa parte de concatenar com a vírgula não entra na questão. Mas eu fui fuçando e procurando algo a mais, então criou essa questão ( segue o código correto)

<meta charset="UTF-8">

<script>

  function pulaLinha(){

        document.write("<br>");
  }


  function mostra(frase){


         document.write(frase)
  }

    var ano = 2022;

         mostra('Lucas tem ' + (ano - 1999) + ' anos' , );

         pulaLinha();

         mostra('Katharine tem ' + (ano - 2001) + ' anos' ); 

         pulaLinha();

        ano = 2020

         mostra('Jubileu tem ' + (ano - 2000) + ' anos'); 

         var idadeLucas = 23;
         var idadeKhatarine =21;
         var idadeJubileu = 20;
         media = ( idadeJubileu + idadeKhatarine + idadeKhatarine)/3;

         pulaLinha()

         mostra('A média das idades é ' + Math.round(media));



</script>
5 respostas
solução!

Faaaaala, Lucas, beleza?

Não posso te dar 100% de certeza nessa resposta mas ao que parece, a função document.write() nativa do JavaScript aceita argumentos ilimitados e por trás dos panos a função vai concatenando todos os argumentos que você enviar. Ao passo que a sua função mostra(frase) aceita um único argumento e vai ignorar todos os outros que você enviar. Por isso ela só escreve até a 1ª vírgula e o document.write() escreve tudo. Aqui vai um exemplo prático:

mostra('Lucas tem ' , (ano - 1999) , ' anos' , );

Sua função mostra(frase) vai receber "Lucas tem " e repassar isso para a document.write() executar.

Foi exatamente isso que aconteceu, porém, quando concatenei com o " + " em vez de vírgula, deu certo. Então, com base no que foi dito por você , posso assumir que a forma que vou concatenar vai influenciar na hora de jogar pra dentro de uma função? ( assuma que não entendi 100% sua resposta , rsrs)

"( assuma que não entendi 100% sua resposta , rsrs)" Kkkkkkk muito bom

Acredito que o document.write() esteja te confundindo. Quando você escreve document.write("texto1", 9999, "texto2") você está chamando a função e enviando 3 parâmetros, não está concatenando, porém, por trás dos panos o document.write() dá um jeito de interpretar seus três parâmetros e juntar eles. Se você fizer isso com a sua mostra(frase), ela vai receber apenas o texto1 e ignorar os outros dois parâmetros, pois foi montada para receber apenas 1 parâmetro. Já ao montar mostra("texto1" + 9999 + "texto2") isso tudo vira um parâmetro só e por isso funciona sem problemas.

Ajudei ou confundi mais? hehe

kkkkkk Agora entendi. Muito obrigado, colega!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Opa, Lucas, tudo bom?

Provavelmente a explicação do Filipe está totalmente correta. Pelo fato da função receber apenas um argumento, ela apenas aceita a primeira informação antes da vírgula, ignorando tudo o que vem a seguir. O document.write puro consegue por baixo dos panos concatenar tudo, pois ele não tem limitação de argumentos. Isso pode ser resolvido, como você fez, utilizando o "+", fazendo uma concatenação em apenas um argumento. Uma dica que posso te dar, que provavelmente ainda será abordada no curso, mas que pode evitar esse tipo de problema, é usar a Template String.

Um exemplo dela com base no seu código:

mostra(`Lucas tem ${ano - 1999} anos`);

Como observado, você troca as aspas(' ') por acentos graves() e coloca as variáveis dentro de um cifrão com chaves(${ }). Dentro das chaves você pode colocar variáveis, funções, operações, etc. Economiza bastante a digitação e fica mais fácil de entender o código. Recomendo dar uma pesquisada depois. :)