No internet connection
  1. Home
  2. JavaScript

Principal Diferença entre "LET" e "VAR" na Declaração de Variáveis em JavaScript

Por Matheus Panobianco @matheus_panobianco
    2023-10-25 02:09:49.151Z

    Principal Diferença entre "LET" e "VAR" na Declaração de Variáveis em JavaScript

    Olá pessoal! Vou citar e exemplificar abaixo a principal diferença que entendi existir entre os dois tipos de declarações. Espero que gostem!

    Uma das principais diferenças entre var e let está no escopo das variáveis. O "escopo" em programação se refere à região do código onde uma determinada variável é visível e acessível. Dito isto, vamos a especificação e exemplificação de seu uso em lógica de programação.

    I. O var tem um escopo de função, o que significa que a variável declarada com var é acessível em toda a função em que foi declarada.
    II. O let tem um escopo de bloco, o que significa que a variável declarada com let só é acessível dentro desse bloco e em blocos filhos aninhados (blocos de código que estão contidos dentro do bloco em questão), mas não fora do bloco em que foi declarada (entenda bloco como "chaves").

    Essa diferença de escopo é facilmente notada em laços de repetição:

    for (var i = 0; i < 3; i++) {
        console.log("VAR: " + i);
    }
    console.log("Fora do loop VAR: " + i);
    

    Nesse caso, a saída será:

    VAR: 0
    VAR: 1
    VAR: 2
    Fora do loop VAR: 3
    

    Observe que a variável i é acessível fora do loop, mesmo após seu término, devido ao escopo do var, que é mais global, o de função. E também que há o incremento ao final do ultimo loop, transformando VAR em 3, que posteriormente faz com que não execute o próximo loop.

    Agora, veja a diferença de comportamento do let:

    for (let j = 0; j < 3; j++) {
        console.log("LET: " + j);
    }
    console.log("Fora do loop LET: " + j);
    

    Nesse caso, a saída será:

    LET: 0
    LET: 1
    LET: 2
    Uncaught ReferenceError: j is not defined
    

    Aqui, a variável j não é acessível fora do loop devido ao escopo de bloco do let. Tentar acessá-la fora do loop resultará em um erro. Isso ocorre devido ao escopo do let, que evita que a variável seja acessada fora de seu escopo. Por isso a mensagem de erro: Uncaught ReferenceError: j is not defined, que traduzindo ao pé da letra fica: "não detectado, erro de referência: j não está definido". Portanto, ao declarar variáveis em loops, é aconselhável optar pelo let, para utiliza-lo somente ali naquele bloco.

    E vocês, encontraram outras diferenças e outros usos entre os dois tipos de declaração? Comentem ai abaixo também se eu cometi algum equivoco no meu texto. Abraço!

    • 10 respostas
    1. Muito bem explicado, e é por isso que não se recomenda o uso de var, segurança. Você pode correr o risco de alterar uma informação que não deveria, aí quebra a sua aplicação, você chora no banho, e até descobrir o que houve, corrigir? Boa sorte.

      1. É verdade. Porém, o let me deixa um pouco mais confuso por altera o valor e depois essa alteração sumir. Mas acredito que com o tempo fique mais fácil utilizar e não se perder.

      2. Em resposta amatheus_panobianco:
        marcelo jhones @MarceloJhonesDev
          2023-10-25 14:06:47.386Z

          como já foi explicado pelos colegas não se utiliza mais var em nas aplicações atualmente pois há diversos problemas de segurança. A única razão para se usar var como esse artigo da documentação do mozila informa é se vc tiver dando manutenção em softwares bem antigas que rodam no Internet Explorer com seu código (ele não suporta let até a versão 11; o navegador mais moderno do Windows, o Edge, suporta let).

          link do artigo: https://developer.mozilla.org/pt-BR/docs/Learn/JavaScript/First_steps/Variables

          1. Eu não sabia que não utilizavam mais. Mas faz todo sentido.

          2. Em resposta amatheus_panobianco:

            Muito bom, esclareceu bastante. Obrigada.

            1. Em resposta amatheus_panobianco:

              **perfeito, obrigada pela explicação com certeza esclareceu minha duvida. **

              1. Em resposta amatheus_panobianco:
                Christian Amsberg Janner @calemao
                  2023-10-31 17:17:16.068Z

                  Uau, isso é incrível! Sua explicação é tão clara, obrigado! Melhorou meu estudo.

                  1. Em resposta amatheus_panobianco:

                    Nossa @matheus_panobianco ficou muito bom, parabéns pelo esforço!

                    1. Em resposta amatheus_panobianco:
                      Brenda Azevedo @brendaazevedo
                        2023-10-25 03:10:35.202Z

                        Bem explicado, vou optar em usar o let. Obrigada Matheus!

                        1. Em resposta amatheus_panobianco:
                          Ana Karolina Souza @anakarolina
                            2023-10-25 21:37:55.620Z

                            Muito bom, é melhor já irem se acostumando a usarem o let, porque faz toda a diferença.