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
mensagemdeve ser acessível fora do blocoif. - 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
- A função
saudacaoé declarada. - Dentro do bloco
if (true), trocamosletporvar. - Com
var, a variávelmensagemé içada para o topo da função, ficando acessível em todo o escopo da função. - 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
lete esperar que a variável exista fora do bloco: isso geraReferenceError. - Declarar com
constsem 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!