Na verdade o var
nem sempre tem escopo global. Segundo a documentação, o escopo também pode ser uma função. Por exemplo, no código abaixo:
function f() {
var x = 1;
console.log('dentro da função:', x);
}
f();
console.log('fora da função:', x); // erro
Dentro da função ele imprime o valor de x
. Mas o segundo console.log
dá erro porque tenta acessar uma variável que não existe (pois x
foi declarado dentro da função, portanto não existe fora dela).
Mais ainda, se eu fizer isso:
var x = 2;
function f() {
var x = 1;
console.log('dentro da função:', x);
}
f();
console.log('fora da função:', x);
O resultado será:
dentro da função: 1
fora da função: 2
Pois agora temos duas variáveis x
, cada uma no seu próprio escopo (uma dentro da função, outra fora).
Por fim, vale lembrar que existem várias outras diferenças, listadas na documentação, e também tem vários exemplos aqui. Sugiro a leitura, pois as diferenças vão muito além do que foi apresentado (sei que a ideia foi só introduzir o assunto, mas acho legal complementar, pois ainda tem muito mais).