1
resposta

Variável 'chute'

A variável 'chute' não tem escopo de função, sendo uma variável local? Desculpa minha ignorância! Partindo desse princípio como foi possível 'usá-la' dentro da função limparCampo( ) uma vez que ela foi declarada dentro do escopo de outra função? Nesse caso dentro da função verificarChute( );

1 resposta

Oi Rosemberg! Tudo bem?

Vou te explicar direitinho o que está acontecendo no seu código e por que a variável chute está sendo usada na função limparCampo().

O que está acontecendo no código?

  1. Variável chute na função verificarChute:

    • Na função verificarChute, você declara a variável chute como local:
     let chute = document.querySelector('input').value;
    
    • Essa variável só existe dentro do escopo da função verificarChute.
  2. Uso da variável chute na função limparCampo:

    • Na função limparCampo, você está reutilizando o nome chute, mas não está declarando a variável com let, const ou var:

      chute = document.querySelector('input');
      
    • Quando você faz isso, o JavaScript assume que chute é uma variável global (ou seja, acessível em todo o código). Isso acontece porque você não declarou chute com let, const ou var dentro da função limparCampo.

Por que isso funciona?

  • Como você não declarou chute com let, const ou var dentro de limparCampo, o JavaScript "vaza" essa variável para o escopo global.
  • Isso significa que, mesmo que chute tenha sido declarada como local em verificarChute, a variável chute em limparCampo é tratada como global.

Problema com essa abordagem:

  • Usar variáveis globais sem querer pode causar efeitos colaterais no seu código. Por exemplo, se outra função também usar uma variável chamada chute, pode haver conflitos.
  • O ideal é sempre declarar variáveis com let, const ou var para evitar esse tipo de situação.

Como corrigir?

Para evitar confusão e garantir que chute seja uma variável local em ambas as funções, você pode declarar chute dentro de limparCampo:

function limparCampo() {
    let chute = document.querySelector('input');
    chute.value = '';
}

Espero ter ajudado.