2
respostas

Sobre a Var

Olá, boa tarde!

Eu não compreendi o por quê de var se manter com valor de 3.14 nas saídas dos 2 consoles.log .

var respostaDeTudo = 42 let idade = 29 const pi = 3.14

{ var respostaDeTudo =3.14 let idade = 42 const pi = 29 console.log( respostaDeTudo, idade, pi) } console.log( respostaDeTudo, idade, pi)

Qual é a saída correta dos dois consoles? *Minha dúvida é em relação a Var, pois no gabarito, a resposta está 3.14 para a saída dos 2 console.log.

Muito obrigada a quem puder me ajudar :)

2 respostas

É pq pra var não existe escopo de bloco, então quando vc declara var respostaDeTudo =3.14 dentro do bloco, esse é o valor que a var vai assumir dali em diante, inclusive fora do bloco. var respostaDeTudo tem escopo global.

Diferentemente de uma let, cuja declaração let idade = 42 dentro do bloco, só vale dentro do bloco. Quando o bloco se encerra, essa variável idade deixa de existir. O segundo console só imprime idade, pq existe uma outra let idade fora do bloco, caso contrário daria erro. Você pode fazer o teste excluindo a primeira declaração de idade e verificar o erro.

A saída é:

3.14 42 29
3.14 29 3.14

O trecho a seguir eu retirei de um artigo, mas eu achei uma boa explicação do comportamento da variável var. No final você pode acessar o link que possui explicações sobre as outras, como let e const.

A grande peculiaridade de uma variável var é o escopo de sua atuação, var possui o que chamamos de escopo de função. Isso significa que se criarmos uma variável deste tipo dentro de uma função, sua referência poderá ser acessada e modificada em qualquer parte desta função, mesmo que criemos outros escopos dentro dela, como um bloco if(), switch() ou for(). Isso pode implicar alguns problemas.

Vamos ver um exemplo disto.

Vamos criar uma função que irá retornar o nome de duas montadoras de carro. O código será o seguinte:

function returnCar() {
    var car = 'Land Rover';
    if (car === 'Land Rover') {
        var car = 'Ferrari';
        console.log('Dentro do if: ' + car);
    }
    console.log('Fora do if: ' + car);
}

returnCar();
console.log('Fora da função: car is not defined.');

// >> Dentro do if: Ferrari
// >> Fora do if: Ferrari
// >> Fora da função: car is not defined.

Note que “Ferrari” foi retornada nos dois casos, tanto dentro como fora do if(). Ou seja, a variável criada dentro do if() sobrescreveu a variável da função, mesmo elas sendo de blocos de código diferentes.

Fonte: [hcode] (https://hcode.com.br/blog/entenda-a-diferenca-entre-var-let-e-const-no-javascript)