Escopo de Variáveis em if-else em JavaScript

Para simplificar, vamos supor que temos uma condição sempre verdadeira:

javascriptif (true) {
  
}

Vamos considerar o seguinte código:

javascriptif (true) {
  let res = '!';
}

console.log(res);

Como você pode ver, o valor '!' deveria ser atribuído à variável res. No entanto, ao executar este código, um erro será exibido no console!

O fato é que as variáveis declaradas dentro de chaves são visíveis apenas dentro dessas chaves e não são visíveis fora delas. Em termos técnicos, estamos falando sobre escopo de variáveis.

Podemos dizer que o escopo das variáveis declaradas dentro de chaves é limitado a essas mesmas chaves. No entanto, se uma variável é declarada fora das chaves, ela é visível tanto dentro quanto fora delas:

javascriptlet res; // variável declarada fora

if (true) {
  res = '!';
}

console.log(res); // exibirá '!'

No exemplo a seguir, o valor 1 ou 2 é atribuído à variável res dependendo da condição:

javascriptlet num = 5;

if (num >= 0) {
  let res = 1;
} else {
  let res = 2;
}

console.log(res);

No entanto, ao executar este código, um erro será exibido no console. Como você já deve entender, o problema está na visibilidade das variáveis. Para resolver o problema, vamos declarar a variável fora da condição:

javascriptlet test = true;
let res; // declarando a variável fora da condição

if (test) {
  res = 1;
} else {
  res = 2;
}

console.log(res); // exibirá 1
Задание 1

O autor do código abaixo queria verificar se a idade era igual ou superior a 18 anos. No entanto, o código não funciona. Corrija o erro do autor do código. Aqui está o código problemático:

javascriptlet age = 17;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

console.log(adult);