1
resposta

Inicialização de variavel

Boa noite =D Estava fazendo alguns testes e um dos testes reparei que uma variavel ao receber um valor pelo html zerava quando interagia com outras variaveis. Foram criados outras variaveis jundo da mesma que sao inicializadas dento do JS para teste e apenas uma delas recebeu o valor correto. Existem dois casos em que ala funcionou, colocando dentro da função ou colocando um valor manual na variavel a. Gostaria de saber se tem alguma forma de ele reconhecer o valor sem precisar colcoar dentro da função.

Resultado do teste.

Entrada: 3

Sainda: a = 0 e b = 0 e c = 6

Resultado do segundo teste colocando o 'a' dentro da função

Entrada: 2

Saida: a = 2 e b = 3 e c = 4

<input type="number" id="num">
<button id="ativa" onclick="ativa()">Ativa</button>
<p id="print"></p>

<script>
    const num = document.querySelector('#num')
    const print = document.querySelector('#print')
    let a = Number(num.value)
    
    function ativa () {
        
        let b = 0
        let c = Number(num.value) *2  

        if(a > 0 && a < 5){
           b = a + 1               
        }            
        print.innerHTML = `</br> a = ${a} e b = ${b}  e c = ${c} `
    }
</script>
1 resposta

Oi Luiz, tudo bem?

O problema principal é que você está inicializando a variável a com o valor de num.value logo no início do seu script. Quando você define let a = Number(num.value), essa linha é executada apenas uma vez, e ela captura o valor atual de num.value (que é '' ou vazio porque o input não tem valor inicialmente).

A função ativa() é chamada quando você clica no botão, e nesse momento, você está lendo o valor atual de num.value novamente para atualizar c.

Se vocêquer que a tenha o valor atual de num.value sempre que a função ativa() é chamada, você deve colocar a linha let a = Number(num.value) dentro da função.

Um exemplo:

<input type="number" id="num">
<button id="ativa" onclick="ativa()">Ativa</button>
<p id="print"></p>

<script>
    const num = document.querySelector('#num')
    const print = document.querySelector('#print')
    
    function ativa() {
        let a = Number(num.value);  // Move a inicialização de 'a' para dentro da função
        let b = 0;
        let c = Number(num.value) * 2;

        if (a > 0 && a < 5) {
            b = a + 1;
        }

        print.innerHTML = `</br> a = ${a} e b = ${b}  e c = ${c}`;
    }
</script>

Assim, cada vez que você chamar a função ativa(), a variável a será atualizada com o valor atual de num.value, e você obterá os resultados desejados.

Um abraço e bons estudos.