Escopo de Variáveis

Vamos entrar em um tema agora muito simples do JavaScript, mas que muita gente esquece, principalmente em projetos pequenos: escopo.

O escopo de uma variável é o alcance que ela tem, de onde pode ser acessada (não confunda com encapsulamento). Esse escopo pode ser global ou local.

No escopo global, como o próprio nome diz, a variável pode ser acessada de qualquer lugar do script, seja de fora de tudo, dentro de funções, dentro de laços, tudo. Diferente do PHP, JavaScript não necessita que as variáveis globais sejam declaradas dentro de funções. Basta usa-las normalmente. Veja um exemplo de uma variável global:

var global = "Variável Global";
function testGlobal() {	alert(global); }

Familiar, não? Também podem ser declaradas sem o “var” na frente. Na verdade, não há segredo algum, você já faz isso desde suas primeiras linhas em JavaScript.

O escopo local é um tanto relativo. Uma variável local pode ser acessada de um mesmo nível ou níveis inferiores, e nunca superiores. Veja:

function local() {
	var local = "Variavel Local";
	alert(local);
}
alert(local);

O primeiro alert (se chamado) funcionará perfeitamente, já o segundo (de fora da função) retornará em um erro. Agora preste atenção: para declarar variáveis locais, precisamos obrigatoriamente incluir o var, senão as variáveis passarão para o escopo global.

Tá certo, isso não é o melhor tutorial do mundo, nem teve muita utilidade. Até agora. Pense em um script onde muitas variáveis utilizam o mesmo nome, em funções diferentes. Seria um problema, não? Observe:

var i = 3;
function errado() {
	while(i < 15) { i++; }
	alert(i);
}
function certo() {
	var i = 3;
	while(i < 15) { i++; }
	alert(i);
}
alert(i);	// Retorna 3
certo();	// Retorna 15
alert(i);	// Ainda retorna 3
errado();	// Retorna 15, tudo certo
alert(i);	// Ops, retorna 15!

Viu? É importante tomar cuidado com esses pequenos detalhes. Já pensou se o seu script dependesse dessa variável i, e em uma simples função ela vai pelos ares (ou melhor, pelos 15)?

E este é o motivo pelo qual usamos for(var i = 0;i < x; i++), declarando o i.

Diferencie-se, cuide dos pequenos detalhes. E boa sorte!

Posts Relacionados

Postado em outubro 21, 2006 às 16:03

Comentários

  1. Micox

    É…
    Iniciantes: Fiquem bem atentos a este post.
    Durante minha infância em javascript tive muitos, muitos problemas causados por contadores ‘i’ globais.
    aff, deu canseira até o dia que eu entendi essa questão de global e local.


  2. JulioGreff

    E nem é difícil. O negócio é só bastante atenção mesmo. Sorte que nunca passei por problemas desses, costumava botar tudo em variáveis diferentes, só pra garantir…


  3. Marcelo Arruda

    Gostaria de saber como eu faço para um script javascript receba em uma variável o valor de Session vinda do ASP, por exemplo.

    No ASP:

    No Javascript (na verdade em um arquivo .JS):
    var confere=Session(“teste”)

    Aqui esta o problema, como deve ser este código para que a variável javascript recupere, ou melhor, receba o valor da session acima?

    Grato por qualquer ajuda.

    Marcelo Arruda.


  4. skynyrd

    Assim:

    var confere= “”;

    Simples, não?


  5. skynyrd

    Vixx o post saiu errado,

    Veja neste link a

    resposta


  6. Lazaro

    Cara, estou fazendo uma pesquisa e esse tuto me ajudou muito. Obrigado


  7. JulioGreff

    @Lazaro: de nada! Estamos aí pra isso!


  8. Deco

    Você poderia incrementar este tuorial falando do escopo em objetos e a utilização do “This”.

    Obigado pelo tutorial!


Trackbacks

  1. JavaScript Orientado a Objetos - Parte 2 » JulioGreff Fevereiro 19, 2008 @ 15:00

Deixe seu comentário