"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > ⚠️ Os perigos ocultos do uso de `var` em JavaScript: por que é hora de seguir em frente

⚠️ Os perigos ocultos do uso de `var` em JavaScript: por que é hora de seguir em frente

Publicado em 2024-11-07
Navegar:149

⚠️ The Hidden Dangers of Using `var` in JavaScript: Why It’s Time to Move On

A palavra-chave var tem sido a forma padrão de declarar variáveis ​​em JavaScript por muitos anos. No entanto, ele possui várias peculiaridades e armadilhas que podem levar a um comportamento inesperado em seu código. Alternativas modernas como let e const resolvem muitos desses problemas, tornando-os a escolha preferida para declarar variáveis ​​na maioria dos casos.


1️⃣ Elevação: var declara variáveis ​​antes que você perceba!

? Explicação:

Em JavaScript, as declarações var são elevadas ao topo de seu escopo, o que significa que são inicializadas como indefinidas, mesmo que a declaração apareça posteriormente no código. Isso pode causar um comportamento confuso e levar a bugs difíceis de detectar.

? Pontos principais:

  • ? Içamento em ação: As declarações de variáveis ​​são movidas para o topo do escopo, mas suas atribuições não.
  • ? Valores indefinidos inesperados: Variáveis ​​podem ser usadas antes de receberem um valor, levando a resultados indefinidos não intencionais.

? Exemplo:

console.log(myVar);  // undefined (hoisted but not initialized)
var myVar = 10;
console.log(myVar);  // 10

? Comentário: A variável myVar é elevada ao topo do escopo, mas é inicialmente indefinida, o que pode causar confusão em seu código.

? Consertar:

  • ? Use let ou const: Essas palavras-chave não são içadas da mesma forma que var, o que ajuda a evitar esse problema.

? Correção de exemplo:

console.log(myLet);  // ReferenceError: myLet is not defined
let myLet = 10;
console.log(myLet);  // 10

? Comentário: Usar let evita que a variável seja acessada antes de ser declarada, reduzindo confusão e possíveis bugs.


2️⃣ Escopo da função versus escopo do bloco: var pode vazar dos blocos!

? Explicação:

Uma das principais falhas do var é que ele tem escopo de função, não de bloco. Isso significa que variáveis ​​declaradas dentro de loops, instruções if ou outros blocos não estão confinadas a esse bloco, mas podem ser acessadas fora dele, o que pode levar a bugs.

? Pontos principais:

  • ? Escopo da função: var tem como escopo a função mais próxima, mesmo se declarada dentro de um bloco como um loop ou instrução if.
  • ? Vazamento de variáveis: Isso pode fazer com que variáveis ​​vazem involuntariamente dos blocos, causando comportamento imprevisível.

? Exemplo:

if (true) {
  var blockVar = "I’m accessible outside this block";
}
console.log(blockVar);  // "I’m accessible outside this block"

? Comentário: Embora blockVar tenha sido declarado dentro do bloco if, ele ainda é acessível fora do bloco porque var tem escopo de função, não de bloco.

? Consertar:

  • ? Use let ou const: Essas palavras-chave têm escopo de bloco, o que significa que só são acessíveis dentro do bloco onde estão definidas.

? Correção de exemplo:

if (true) {
  let blockLet = "I’m only accessible inside this block";
}
console.log(blockLet);  // ReferenceError: blockLet is not defined

? Comentário: Usar let ou const garante que as variáveis ​​permaneçam confinadas aos seus respectivos blocos, evitando vazamento de escopo.


3️⃣ Problemas de redeclaração: var permite que você declare a mesma variável duas vezes!

? Explicação:

Com var, você pode declarar novamente acidentalmente a mesma variável no mesmo escopo, o que pode substituir o valor anterior. Isso pode levar a bugs não intencionais, especialmente em bases de código maiores, onde nomes de variáveis ​​podem ser reutilizados por engano.

? Pontos principais:

  • ? Redeclarando variáveis: var permite redeclarar uma variável dentro do mesmo escopo, potencialmente sobrescrevendo valores existentes.
  • ? Substituições não intencionais: Isso pode causar bugs difíceis de detectar, especialmente em funções grandes ou complexas.

? Exemplo:

var name = "Alice";
var name = "Bob";  // No error, overwrites the previous value
console.log(name);  // "Bob"

? Comentário: A segunda declaração de nome substitui a primeira, potencialmente causando erros no código.

? Consertar:

  • ? Use let ou const: Essas palavras-chave evitam que você redeclare variáveis ​​no mesmo escopo, reduzindo o risco de substituições não intencionais.

? Correção de exemplo:

let name = "Alice";
let name = "Bob";  // SyntaxError: Identifier 'name' has already been declared

? Comentário: Usar let ou const ajuda a evitar a redeclaração de variáveis ​​e garante que seu código permaneça previsível.


4️⃣ var em loops: potencial para bugs em código assíncrono

? Explicação:

Ao usar var em loops, o valor da variável pode mudar de maneiras inesperadas, especialmente ao trabalhar com código assíncrono. Como var tem escopo de função e não de bloco, a variável de loop pode conter um valor inesperado quando acessada dentro de retornos de chamada assíncronos.

? Pontos principais:

  • ? Variáveis ​​de loop: Variáveis ​​declaradas com var dentro de loops não estão confinadas ao bloco de loop, levando a possíveis bugs quando acessadas posteriormente.
  • Problemas assíncronos: Isso pode causar bugs em operações assíncronas como setTimeout ou promessas, onde a variável de loop pode ter um valor inesperado.

? Exemplo:

for (var i = 0; i  console.log(i), 1000);  // Prints: 3, 3, 3 (unexpected)
}

? Comentário: Como var não tem escopo de bloco, a variável de loop i é compartilhada em todas as iterações e seu valor final (3) é usado em cada retorno de chamada setTimeout.

? Consertar:

  • Use let: A palavra-chave let tem escopo de bloco, garantindo que cada iteração do loop obtenha seu próprio valor independente da variável do loop.

? Correção de exemplo:

for (let i = 0; i  console.log(i), 1000);  // Prints: 0, 1, 2 (as expected)
}

? Comentário: Usar let cria uma nova instância de i para cada iteração, corrigindo o problema de retorno de chamada assíncrono e garantindo que os valores corretos sejam impressos.


5️⃣ var e fechamentos: uma fonte de confusão

? Explicação:

Os fechamentos podem levar a um comportamento inesperado quando combinados com var. Como var tem escopo de função, seu valor pode mudar de maneiras que não são esperadas quando um encerramento o captura.

? Pontos principais:

  • ? Closures em JavaScript: Um encerramento é uma função que lembra seu escopo circundante mesmo depois que a função externa termina de ser executada.
  • ? Problemas de variáveis ​​compartilhadas: Quando var é usado dentro de um fechamento, a variável capturada pode ser compartilhada entre todos os fechamentos, levando a um comportamento inesperado.

? Exemplo:

function createFunctions() {
  var funcs = [];
  for (var i = 0; i 



? Comentário: Todos os fechamentos estão capturando o mesmo valor i porque var tem escopo de função, levando a resultados inesperados.

? Consertar:

  • ? Use let: Ao usar let, cada encerramento captura uma nova instância da variável de loop, resolvendo o problema.

? Correção de exemplo:

function createFunctions() {
  var funcs = [];
  for (let i = 0; i 



? Comentário: Com let, cada encerramento obtém sua própria cópia de i, corrigindo o problema e garantindo que os valores esperados sejam impressos.


? Conclusão: hora de dizer adeus ao var

Embora var tenha sido a maneira original de declarar variáveis ​​em JavaScript, ele tem várias deficiências que o tornam uma escolha ruim no desenvolvimento moderno de JavaScript. A introdução de let e const fornece melhor escopo, reduz o risco de bugs e torna seu código mais previsível. Para escrever um JavaScript mais limpo e sustentável, é hora de deixar var e adotar let e const.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/dharamgfx/the-hidden-dangers-of-using-var-in-javascript-why-its-time-to-move-on-2jgm?1Se houver algum violação, entre em contato com [email protected] para excluir
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3