Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sobre escopo de variável em JS

Neste exercício (https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-1/task/23127) tem a seguinte orientação:

Uma maneira de evitar que o valor da variável vaze para fora do if é a seguinte:

var idade = 18;
var temCarteira = true;

(function() {
    if(idade >= 18 && temCarteira) {
        var msg = 'Pode dirigir';
        console.log(msg);
    }
})();

alert(msg); // exibe undefined

Mas eu não entendi o que de fato impede o vazamento, pois foi usado var e não let.

2 respostas
solução!

Boa tarde Geovane,

O escopo de uma var e let são diferentes. Quando declaramos uma variável com var o escopo dela é baseado em funções.

if(true) {
    var global = 2;
}

function teste() {
    var global = 4;
    console.log(global); //2
}

console.log(global); //2

Ou seja, uma var declarada dentro de um if "vaza" para fora dele. Já o escopo de uma let é baseado em blocos de chaves.


let global =  0;

if(true) {
    let global = 2;
    console.log(global);
}

function teste() {
    let global = 4;
    console.log(global); //4
}

console.log(global); //0

Ou seja quando usamos var e queremos criar um escopo, precisamos declarar essa var dentro de uma função. Para evitar essa "gambiarra" foi criado o let para que cada escopo seja melhor definido. Na dúvida, sempre use let.

Abraços

Ah sim entendi. Na verdade a forma como o Flávio colocou me fez entender que o var sempre vazava, mas pelo que você disse e o código também, numa função o var tem escopo local. Ou seja, não é muito diferente das demais linguagens. Eu fiquei confuso porque surgiu o let, e também porque não conheço JS.

Obrigado!