Tipos de Variáveis e seus escopos
var
- Escopo global. Não entende escopo de bloco.
- No browser o escopo global é representado por "window".
- Mutável.
- Valor inicial é opcional, o default é undefined.
- Pode ser redeclarada.
- Faz Hoisting.
- Declarada com o padrão camelCase.
let
- Escopo de bloco (ES6).
- Mutável.
- Valor inicial é opcional, o default é undefined.
- Não pode ser redeclarada, somente reatribuída.
- Não faz Hoisting.
- Declarada com o padrão camelCase.
const
- Escopo de bloco (ES6).
- Imutável.
- Valor inicial é obrigatório.
- Não pode ser redeclarada, nem reatribuída.
- Não faz Hoisting.
- Declarada com o padrão SNAKE_UPPER_CASE.
Observações:
O tipo por referência é imutável e não permite alterar referência, mas permiti remover ou alterar o valor das propriedades em Objects e Arrays. Objetos possuem um tipo de configuração que permite bloquear este tipo de permissão.BOAS PRÁTICAS para declaração de variáveis
- Não use espaços em branco, hifen, caracteres especiais
- Sempre inicie com letra
- Use o padrão camelCase para variáveis
- Use o padrão Upper Case Snake Case para constantes
- Proíbido usar palavras reservadas (dá erro)
- Sempre declarar no topo do código, no inicio do escopo
Hoisting
Hoisting de variáveis e funções
Closure - Escopo Léxico
Capacidade de uma variável de lembrar do ambiente onde foi criada.
- Escopo global Na web o escopo global é representado por "window".
- Escopo de função
function fn(){
// Escopo de função
}
ES6 com a inclusão let e const
if(true){
// Escopo de bloco
}
Boas Práticas
- Evitar o uso de variáveis globais.
- Sempre trabalhar com funções puras. Função pura: Recebe um parâmetro (assim, sabemos de onde está vindo) e retorna alguma coisa.