Home › Fóruns › JavaScript › Retorno de função NaN
- Este tópico contém 6 respostas, 2 vozes e foi atualizado pela última vez 3 anos, 3 meses atrás por Tutora Mayla.
-
AutorPosts
-
-
26 de julho de 2021 às 22:09 #72333Roberto CarreiraParticipante
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 🙂 -
27 de julho de 2021 às 19:26 #72411Tutora MaylaMestre
Roberto, na seguinte parte do código
var b = a % 5;
possivelmente a variávela
não está sendo encontrada pois foi definida dentro do escopo dafuncA
, confira se não é este o problema e nos retorne. -
1 de agosto de 2021 às 22:42 #72668Roberto CarreiraParticipante
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.-
2 de agosto de 2021 às 19:09 #72721Tutora MaylaMestre
Roberto, é possível que este erro seja causado pela chamada da função
funcB
, verifique se você está passando o parâmetrox
ao chamarfuncB
. Por exemplo, ao declarar uma funçãoola
da seguinte forma:function ola(nome) { console.log('Olá, ', nome); }
Precisamos ao chamar esta função passar o parâmetro
nome
, por exemploola('Roberto')
.Espero ter ajudado, caso a dúvida persista volte a entrar em contato e nos envie o seu código completo.
-
-
5 de agosto de 2021 às 20:53 #72966Roberto CarreiraParticipante
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? -
5 de agosto de 2021 às 20:57 #72967Roberto CarreiraParticipante
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>-
6 de agosto de 2021 às 20:27 #73033Tutora MaylaMestre
Roberto, o problema no seu código está na chamada das funções dentro do
script
. Veja que emvar funcb = funcB();
a funçãofuncB()
não recebe parâmetros, logo ao ser executada a divisão dá erro já quex
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 colocarvar 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.
-
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.