09/12
2009

A palavra reservada var em JavaScript define a variável como sendo local ao bloco de escopo onde está sendo declarada:

1
2
3
4
5
6
7
8
9
10
11
12
var x = 1;
 
function fn1() {
    var x = 2;
    alert(x);
}
function fn2() {
    alert(x);
}
 
fn1();
fn2();

O resultado é: 2 e depois 1. Neste exemplo, uma outra variável x (que por acaso tem o mesmo nome) foi definida dentro da função fn1. Por isso, ao executarmos a função fn2 o valor original da variável declarada na linha 1 permanece.

Para que o resultado fosse 2 e 2:

1
2
3
4
5
6
7
8
9
10
11
12
var x = 1;
 
function fn1() {
    x = 2; // atribuição de valor sem var
    alert(x);
}
function fn2() {
    alert(x);
}
 
fn1();
fn2();

A modificação da linha 4 altera o valor da variável declarada na linha 1 e temos, consequentemente, o mesmo resultado nos dois alerts (trata-se da mesma variável com o mesmo nome).

Note que na linha 1 dos dois exemplos a variável foi declarada utilizando-se var. Entretanto, a remoção de var não implica em nenhuma mudança de comportamento. Isso acontece porque neste caso a declaração ocorre no escopo mais “exterior” do nosso código. Com ou sem var ela pode ser considerada global.

E porque isso é importante?

O uso de variáveis globais é uma péssima prática. A variável pode ser utilizada e modificada por qualquer parte do código. Isso é fonte de inúmeros bugs. A não ser que seja realmente necessário, sempre declare as variáveis como locais. É possível (e recomendável) declarar várias variáveis locais de uma vez:

1
2
3
4
5
6
    var x = 1, y, z; // boa prática
 
    var x = 1; // não tão boa
    var y;
    var z;
}

1 comentário até agora

Comente!
  1. E como fica o escopo utilizando varieis em objetos. acessando variaveis com This

Get Adobe Flash playerPlugin by wpburn.com wordpress themes