Retorno de função NaN

Home Fóruns JavaScript Retorno de função NaN

Visualizando 4 respostas da discussão
  • Autor
    Posts
    • #72333
      Roberto Carreira
      Participante

      Boa noite.
      Estou na aula 8 e criei um exercício baseado nas variáveis que o professor calculou na aula, para mostrar os operadores lógicos.
      Pois bem, eu criei funções com os algorítmos de cálculo, e via evento DOM, o usuário clica num <button></button> e o programa retorna o valor da função, ou pelo menos era para retornar, porque a função sempre retorna NaN.
      Seguem duas delas abaixo:
      function funcA(){
      var a = 5 + 3;
      window.document.getElementById(‘a’).innerHTML = “<p class=’result_set’>O valor de A é ” + a + “.</p>”;
      return Number(a);
      }

      function funcB(){
      var b = a % 5;
      window.document.getElementById(‘b’).innerHTML = “<p class=’result_set’>O valor de B é ” + Number(b) + “.</p>”;
      return Number(b);
      }

      A funcB() vai retornar NaN.
      Onde é que eu estou errando?
      Obrigado pela ajuda, quem puder 🙂

    • #72411
      Tutora Mayla
      Mestre

      Roberto, na seguinte parte do código var b = a % 5; possivelmente a variável a não está sendo encontrada pois foi definida dentro do escopo da funcA, confira se não é este o problema e nos retorne.

    • #72668
      Roberto Carreira
      Participante

      Oi, Mayla, boa noite.
      Eu alterei a função funcB() para receber a variável resultante de funcA(), fazendo o seguinte:
      <script>
      var x = funcA();
      funcB(x){
      var a = x;
      var b = a % 5;
      return b;
      }
      </script>
      Mesmo assim eu tenho o mesmo problema, com o mesmo retorno.
      Quando eu ponho todas as variáveis fora das funções, tudo funciona, mas mesmo quando tento por a variável retornada de outra função como valor passado dentro da estrutura da função, dá o mesmo erro, e eu não sei onde está o erro.

      • #72721
        Tutora Mayla
        Mestre

        Roberto, é possível que este erro seja causado pela chamada da função funcB, verifique se você está passando o parâmetro x ao chamar funcB. Por exemplo, ao declarar uma função ola da seguinte forma:

        function ola(nome) {
            console.log('Olá, ', nome);
        }

        Precisamos ao chamar esta função passar o parâmetro nome, por exemplo ola('Roberto').

        Espero ter ajudado, caso a dúvida persista volte a entrar em contato e nos envie o seu código completo.

    • #72966
      Roberto Carreira
      Participante

      Oi, Mayla.
      Eu passei o atributo x na função, quando do evento onclick = ‘funcB(x);’. No caso, ficou assim:
      var funca = funcA();
      E no input type=’radio’, para o evento onclick=’funcB(funca);’
      Mesmo assim, dá NaN.
      O que fazer? Ou, onde eu estou errando?

    • #72967
      Roberto Carreira
      Participante

      Segue o código todo abaixo, referente ao meu post anterior:
      <script>
      function funcA(){
      var a = 5 + 3;
      window.document.getElementById(‘a’).innerHTML = “<p class=’result_set’>O valor de A é ” + a + “.</p>”;
      return a;
      }
      var funca = funcA();
      function funcB(x){
      var b = x % 5;
      window.document.getElementById(‘b’).innerHTML = “<p class=’result_set’>O valor de B é ” + b + “.</p>”;
      return b;
      }
      var funcb = funcB();
      function funcC(x){
      var c = 5 * x**2;
      window.document.getElementById(‘c’).innerHTML = “<p class=’result_set’>O valor de C é ” + c + “.</p>”;
      return c;
      }
      var funcc = funcC();
      function funcD(x){
      var d = 10 – x/2;
      window.document.getElementById(‘d’).innerHTML = “<p class=’result_set’>O valor de D é ” + d + “.</p>”;
      return d;
      }
      var funcd = funcD();
      function funcE(x){
      var e = 6* 2/x;
      window.document.getElementById(‘e’).innerHTML = “<p class=’result_set’>O valor de E é ” + e + “.</p>”;
      return e;
      }
      var funce = funcE();
      function funcF(x,y){
      var f = x % y + 4/y;
      window.document.getElementById(‘f’).innerHTML = “<p class=’result_set’>O valor de F é ” + f + “.</p>”;
      return f;
      }
      var funcf = funcF();
      </script>

      O html:
      <div id=’variaveis’>
      <table>
      <tr><td><div id=’a’><button onclick=’funcA();’>Variável A</button><small> a = 5 + 3 </small></div>
      <tr><td><div id=’b’><button onclick=’funcB(funca);’>Variável B</button><small> b = a % 5 </small></div>
      <tr><td><div id=’c’><button onclick=’funcC(funcb);’>Variável C</button><small> c = 5 x b^2 </small></div>
      <tr><td><div id=’d’><button onclick=’funcD(funca);’>Variável D</button><small> d = 10 – a/2 </small></div>
      <tr><td><div id=’e’><button onclick=’funcE(funcd);’>Variável E</button><small> e = 6 x 2/d </small></div>
      <tr><td><div id=’f’><button onclick=’funcF(funcb,funce);’>Variável F</button><small> f = b % e + 4/e </small></div>
      </table>
      </div>

      • #73033
        Tutora Mayla
        Mestre

        Roberto, o problema no seu código está na chamada das funções dentro do script. Veja que em var funcb = funcB(); a função funcB() não recebe parâmetros, logo ao ser executada a divisão dá erro já que x não existe. De forma semelhante todas as outras variáveis dentro do script estão dando problema pois a função atribuída a elas não recebe parâmetros.
        O correto para que este problema acabe seria colocar var funcb = funcB(funca); e fazer de forma semelhante para as demais. Porém resolvendo desta forma, todas as funções já terão sido executadas quando abrir a tela, ou seja, os botões terão sumido restando apenas o texto no lugar deles.
        Para que não seja causado outro problema ao resolver este, eu indico criar todas as variáveis antes das funções e dentro de cada uma delas, antes de retornar, atribuir seu resultado a função que guardará o valor dela.

        Fazendo desta forma abaixo, e replicando para as demais funções, acredito que funcione perfeitamente.

        var funca, funcb,funcc,funcd,funce,funcf;
        function funcA(){
        var a = 5 + 3;
        window.document.getElementById('a').innerHTML = "<p class='result_set'>O valor de A é " + a + ".</p>";
        funca = a;
        return a;
        }
        function funcB(x){
        var b = x % 5;
        window.document.getElementById('b').innerHTML = "<p class='result_set'>O valor de B é " + b + ".</p>";
        funcb = b;
        return b;
        }

        Parabéns pela iniciativa de estar criando seus próprios exercícios, continue se dedicando e será cada vez um programador melhor!
        Espero ter ajudado com sua dúvida, quaisquer outras estamos a disposição.

Visualizando 4 respostas da discussão
  • Você deve fazer login para responder a este tópico.