Fácil JavaScript

Corrija o escopo

Enunciado

O código abaixo tenta imprimir mensagem fora do bloco if, mas ocorre um erro. Altere a declaração para que a variável seja acessível fora do bloco, mantendo o escopo de função.

Requisitos

  • A variável mensagem deve ser acessível fora do bloco if.
  • O programa deve imprimir Olá, mundo!.
  • Não deve ocorrer erro de referência.

Código inicial

function saudacao() {
  if (true) {
    let mensagem = 'Olá, mundo!';
  }
  console.log(mensagem);
}

saudacao();

Saída esperada

Olá, mundo!
Ver dica

Lembre-se: let tem escopo de bloco, var tem escopo de função.

Mostrar solução
function saudacao() {
  if (true) {
    var mensagem = 'Olá, mundo!'; // var tem escopo de função
  }
  console.log(mensagem); // acessível fora do bloco
}

saudacao();

Passo a passo

  1. A função saudacao é declarada.
  2. Dentro do bloco if (true), trocamos let por var.
  3. Com var, a variável mensagem é içada para o topo da função, ficando acessível em todo o escopo da função.
  4. Fora do bloco, console.log(mensagem) imprime o valor atribuído.

Por que funciona

var ignora o escopo de bloco e pertence à função inteira. Assim, a variável declarada dentro do if vaza para o escopo da função, permitindo o acesso fora do bloco.

Erros comuns

  • Usar let e esperar que a variável exista fora do bloco: isso gera ReferenceError.
  • Declarar com const sem valor inicial: const mensagem; causa erro de sintaxe.
  • Esquecer de chamar a função: a saída não aparece.

Outra forma de resolver

Se quiser manter let, declare a variável fora do bloco:

function saudacao() {
  let mensagem;
  if (true) {
    mensagem = 'Olá, mundo!';
  }
  console.log(mensagem);
}

Essa abordagem é preferível para manter o escopo restrito à função sem usar var.

Saída esperada

Olá, mundo!