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

[Dúvida] Dúvida em relação ao tipo de declaração das variáveis

Olá, estive revisando o script que calcula o IMC, feito na aula 5, e notei que posso declarar minhas variáveis com tipos diferentes. No Script1 , declarei as variáveis com const, enquanto no Script2 declarei com var. Gostaria de entender melhor as implicações práticas desses tipos de declaração de variáveis em relação ao escopo e à mutabilidade dos valores. Qual é a diferença funcional entre usar const e var nessas declarações? Ambas retornam o mesmo resultado.

Script1:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br><hr><br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso, altura) {
        const imc = peso / (altura * altura);
        return imc;

    }

    const imcPablo = calculaImc(90, 1.76);
    const imcAmigo = calculaImc(78, 1.89);

    mostra("O IMC do Pablo é " + imcPablo);
    mostra("O IMC do amigo é " + imcAmigo)
</script>

Script2:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br><hr><br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso, altura) {
        var imc = peso / (altura * altura);
        return imc;

    }

    var imcPablo = calculaImc(90, 1.76);
    var imcAmigo = calculaImc(78, 1.89);

    mostra("O IMC do Pablo é " + imcPablo);
    mostra("O IMC do amigo é " + imcAmigo)
</script>
2 respostas
solução!

Olá, Pablo!

Primeiramente, vou explicar as principais diferenças entre var e const.

A palavra reservada var pode ser declarada e atualizada dentro do escopo, ou seja a região do código. E pode ser declarada sem ser inicializada.

As declarações com var tem escopo global (quando é declarada fora de uma função, ou seja ela está fora de um bloco de função -- Observe o exemplo 1 -> a variável saudacaoGlobal) ou escopo de função/local (quando é declarada dentro de uma função, ou seja só está disponível e pode ser acessada dentro da função -- Observe o exemplo 1 -> a variável saudacaoLocal).

EXEMPLO 1

var saudacaoGlobal = "Olá, saudações!";

function novaFuncao(){
    var saudacaoLocal = "Olá a todos!";
}

Neste caso a variável saudacaoGlobal tem um escopo global, existe fora de uma função e pode ser acessada por toda a página.

Enquanto a variável saudacaoLocal tem um escopo de função. E não podemos acessá-la fora de uma função.

A palavra reservada const não define um valor constante e sim uma referência constante para um valor. Por conta disso, não podemos alterar valores primitivos constantes, mas podemos alterar as propriedades de objetos constantes. Observe o exemplo 2.

EXEMPLO 2

const saudacoes = "Olá, saudações!";
    saudacoes = "Olá a todos!"; 	// erro: atribuição a uma variável constante. 

Então, após analisar seu código, posso dizer que neste caso específico abaixo, não geraria nenhum tipo de erro, pois são const diferentes.

    const imcPablo = calculaImc(90, 1.76);   // const do Pablo
    const imcAmigo = calculaImc(78, 1.89);   // const do Amigo

O uso da palavra-chave const não "fixa" o valor de uma variável de forma que ela não possa ser alterada. Em JavaScript, quando você declara uma variável usando const, isso significa que o identificador (nome da variável) não pode ser reatribuído. No entanto, isso não impede que o valor armazenado na variável seja alterado, especialmente se o valor for mutável (como um objeto ou array).

No caso da função calculaImc, o const imc é redefinido sempre que a função é chamada, e cada chamada produz um novo valor de IMC. O fato de você armazenar esse valor em uma variável constante fora da função (imcPablo e imcAmigo) não afeta a capacidade da função de calcular novos valores de IMC toda vez que é chamada. Portanto, o uso de const não "fixa" o valor de imc, mas sim impede que o identificador imc seja reatribuído a outro valor.

É isso! Qualquer dúvida só escrever que eu tentarei sanar. E caso eu tenha explicado algo errado, me falem por favor, que eu irei fazer a alteração.

Segue as referências que utilizei, caso você precise se aprofundar mais no assunto:

LINK1 LINK2 LINK3

Maravilha, agora entendi. Ficou bem claro e detalhado sua explicação, muito obrigado :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software