Variáveis e constantes
As variáveis são usadas para guardar dados em memória.
Uma variável representa uma localização de memória onde podemos armazenar dados ou de onde podemos ler dados.
Para facilitar as coisas as variáveis têm nomes que representam essa localização em memória.
Nomes das variáveis
Os nomes que podemos dar a variáveis estão sujeitos a algumas regras:
- Não podem ser palavras reservadas do Javascript, por exemplo, if, for, while, etc.
- Não podem começar por um número, por exemplo, 3num.
- Podem ter letras, números e hífen (_).
- Devem ter um significado que dê uma pista sobre os dados que contém, como por exemplo, totalAlunos ou valorFacturado.
Declaração de variáveis
Declaração com var
Até ao Javascript 6 (ES2015), só podíamos declarar variáveis usando a palavra reservada var:var total;
Neste exemplo a variável total foi declarada sem qualquer dado pelo que o seu valor será undefined.
Podemos no entanto declarar uma variável e inicializa-la de imediato:
var total=10;
Podemos declarar várias variáveis numa só declaração:
var total, nrItems=5, valorFaturado=0;
Declaração com let
A partir do Javascript 6 (ES2015), podemos declarar variáveis com let:let total;
Dado que a variável total foi declarada sem qualquer valor inicial, o seu valor será undefined.
Podemos declarar a variável e inicializá-la de imediato:
let total=10;
Podemos declarar várias variáveis numa só declaração:
let total, nrItems=5, valorFaturado=0;
Declaração de constantes
Podemos declarar constantes em Javascript com a instrução const:
const PI = 3.141618;
let areaCirculo = PI * (5 ** 2);
Escopo (alcance) das variáveis
O Javascript tem dois tipos de escopo:
- Escopo global
- Escopo local
O escopo global é o escopo das variáveis declaradas fora de qualquer bloco. Estas variáveis são visíveis em qualquer parte do código.
O escopo local é o escopo das variáveis declaradas dentro de um bloco de código. Estas variáveis só são visíveis nesse bloco.
Os parâmetros de uma função são consideradas variáveis locais a essa função.
Até ao Javascript 6 (ES2015), o único bloco de código que criava um escopo era o de uma função. A partir do Javascript 6, qualquer bloco de código entre chavetas {}, por exemplo if, for, é um bloco de código com o seu escopo próprio:
var total=10;
function soma(){
var n1=6;
var n2=5;
console.log(n1+n2);
}
console.log('total=' + total);
console.log('n1='+ n1);
O output deste código será total=10 porque o escopo da variável total é global, sendo visível de qualquer parte do código.
A segunda instrução console.log dará origem ao erro Uncaught ReferenceError: n1 is not defined porque a variável n1 pertence ao escopo da função soma() e não é visível fora dele.
Escopo e var
Se usarmos var para declarar variáveis os únicos escopos considerados são o global e o local no corpo das funções.
Qualquer outro bloco de código entre chavetas não possui escopo próprio sendo as variáveis declaradas nesses blocos perfeitamente visíveis fora dele:
var total=10;
{
var n1=6;
var n2=5;
console.log(n1+n2);
}
console.log('total=' + total);
console.log('n1='+ n1);
O output deste código será:
11
total=10
n1=6
A variável n1 é visível fora do bloco de código uma vez que foi declarada com var.
A variável global total é visivel em qualquer ponto do código.
Escopo e let
Se usarmos let para declarar variáveis qualquer variável declarada dentro de um bloco definido por chavetas {}, possui escopo próprio não sendo essa variável visível fora desse bloco:
let total=10;
{
let n1=6;
let n2=5;
console.log(n1+n2);
}
console.log("total=" + total);
console.log(n1);
O output deste código será:
11
total=10
Uncaught ReferenceError: n1 is not defined
Ou seja, uma vez que a variável n1 foi declarada usando let dentro de um bloco de código, ela deixou de ser visível fora desse bloco.
Tempo de vida das variáveis
As variáveis globais permanecem em memória até o browser ser fechado.
As variáveis locais a um bloco de código são apagadas quando esse bloco de código termina a execução.
