Emerson Pereira

← All posts

var, let, const resumido

May 18, 2020

three balloons

Diferenças

var

  • Pode ser redeclarada
  • Pode ser reatribuída a outro valor
  • Não é escopada por block
  • É escopada por função

let

  • Não pode ser redeclarada
  • Pode ser reatribuída a outro valor
  • É escopada por block (e função)

const

  • Não pode ser redeclarada
  • Não pode ser reatribuída a outro valor
  • É escopada por block (e função)
Pode ser redeclarada Pode ser reatribuida É escopada em bloco
var
let
const

let e const são escopadas em bloco logo também são escopadas em função.

Exemplos de escopos de variáveis

Para escopar uma variável usando let ou const basta ela estar dentro de blocos ({}):

{
  const x = 1
}
console.log(x) // x is not defined

Para escopar uma variável usando var pode-se usar IIFE (Immediately Invoked Function Expression) já que var só pode ser escopada por função:

(function () {
  var x = 1
})()
console.log(x) // x is not defined

Temporal Dead Zone

É possível acessar varáveis em var antes de ela serem declaras. Porém, não é possível acessar variáveis em let ou const antes de as mesmas serem declaradas devido a algo chamado Temporal Dead Zone.

Acessar uma variável em var antes de ela estar declarada retorna undefined:

console.log(x)
var x = 1
// undefined

Acessar uma variável em let ou const antes de ela ser declarada resulta em erro:

console.log(x)
const x = 1
// ReferenceError

let vs const

A escolha de qual tipo de variável usar é de opinião e não tem uma resposta definitiva. É recomendado escolher uma convenção ao iniciar um projeto levando em conta prós e contras de cada uma.

Veja Dan Abramov falar um pouco sobre prós e contras de cada uma.

Relevância do var

Apesar de let e const terem se tornado mais populares var ainda é relevante. A preferência por var também é de opinião e tem seus benefícios e malefícios.

Veja Wes Bos mostrar alguns exemplos de pessoas que preferem um ou outro e seus motivos.

Achou algum erro ou quer sugestionar uma mudança?
Edite no GitHub


My personal blog.
I write about web development stuff.