Baseline Widely available
SumárioO variable
statement declara uma variável, opcionalmente é possÃvel atribuir à ela um valor em sua inicialização.
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
varnameN
Nome da variável. Pode ser utilizado qualquer identificador legal.
valueN
Valor inicial da variável. Pode ser qualquer expressão legal.
Declarações de variáveis, onde quer que elas ocorram, são processadas antes que qualquer outro código seja executado. O escopo de uma variável declarada com var
é seu contexto atual em execução, o qual é a função a qual pertence ou, para variáveis declaradas fora de qualquer função, o escopo é o global.
Atribuir um valor a uma variável não declarada anteriormente implica em criar uma variável global (ela se torna uma propriedade do objeto global) quando a atribuição é executada. As diferenças entre uma variável declarada e uma não delcarada são:
1. Variáveis declaradas estão relacionadas com o contexto de execução quando elas são criadas (por exemplo, uma função, objeto). Por outro lado, as variaveis não declaradas sempre são globais.
function x() {
y = 1; // Lança a exceção ReferenceError em modo restrito (strict mode)
var z = 2;
}
x();
console.log(y); // logs "1"
console.log(z); // Lança a exceção ReferenceError: z não foi definida fora da função x()
2. Variáveis declaradas são criadas antes de qualquer código ser executado. As variáveis não declaradas não existem até quando o código atribuir um valor a ela.
console.log(a); // Lança a exceção ReferenceError.
console.log("still going..."); // Nunca será executado.
var a;
console.log(a); // mostra "undefined" ou "" dependendo do naveador.
console.log("still going..."); // mostra "still going...".
3. Variáveis declaradas são propriedades não configuráveis no contexto de execução (função ou global). Variaveis não declaradas são configuráveis (por exemplo, podem ser excluÃdas).
var a = 1;
b = 2;
delete this.a; // Lança a exceção TypeError em modo restrito(strict mode). Caso contrário, Falha silenciosamente.
delete this.b;
console.log(a, b); // Throws a ReferenceError.
// A propriedade 'b' foi deletada e não existe mais.
Por conta dessas três diferenças, falha para declarar variáveis, muito provavelmente, levar a resultados inesperados. Então, é recomendado sempre declarar as variáveis, independentemente se as variáveis estão em escopo de função ou escopo global. E o modo restrito (strict mode) do ECMAScript 5 sempre lançará uma exceçao quando o código atribuir um valor a uma variável não declarada.
var hoistingComo as declarações de variáveis (e declarações em geral) são processadas antes de qualquer código seja executado, declarar uma variável em qualquer lugar no código é equivalente a declarar no inicio. Isso também significa que uma variável pode aparecer para ser usada antes dela ser declarada. Esse comportamento é chamado de "hoisting", a variável é movida para o inicio da função ou do código global.
bla = 2;
var bla;
// ...
// é implicitamente entendido como:
var bla;
bla = 2;
Por essa razão, recomenda-se sempre declarar variáveis na parte superior do seu escopo de aplicação (o topo do código global e a parte superior do código da função). Por isso, é claro que as variáveis são função de escopo (local) e que são resolvidos na cadeia de escopo.
Exemplos Declarando e inicializando duas variáveis Atribuindo duas variáveis com uma única expressãovar a = "A";
var b = a;
// Equivalente a:
var a,
b = (a = "A");
à sempre importante lembrar da ordem da declaração das variáveis:
var x = y,
y = "A";
console.log(x + y); // undefinedA
Então, x e y são declarados antes de qualquer código seja executado, a atribuição ocorre posteriormente. Quando "x = y" for executado, y existe e nenhum exceção ReferenceError é lançada, e o valor de y será considerado como 'undefined
'. Por este motivo, este valor é atribuido a x. Depois disso, o valor 'A' é atribuido a variável y. Consequentemente, depois da primeira linha, x === undefined && y === 'A', então o resultado.
var x = 0;
function f() {
var x = (y = 1); // x é declarado localmente,y não é!
}
f();
console.log(x, y); // 0, 1
// x é uma variável global como experado
// y vazou para fora da função!
Variável global implÃcita e fora do escopo da função
Variáveis que aparecem como variáveis globais implicitas podem ser referenciadas como variáveis fora do escopo da função:
var x = 0; // x é declarada como global e é igual a 0
console.log(typeof z); // undefined, desde que z não tenha sido criada anteriormente
function a() {
// quando a for chamada,
var y = 2; // y é declarada como local desta função, e o valor 2 é atribuido
console.log(x, y); // 0 2
function b() {
// quando b for chamado,
x = 3; // atribui o valor 3 a variável global existente, ele não cria uma nova variável global
y = 4; // atribui o valor 4 a uma variável fora, ele não cria uma nova variável
z = 5; // cria uma nova variável global e atribui o valor 5.
} // (Lança a exceção ReferenceError em modo restrito.)
b(); // chamando b, o código irá criar z como variável global
console.log(x, y, z); // 3 4 5
}
a(); // chamando a, também irá chamar b
console.log(x, z); // 3 5
console.log(typeof y); // indefinido já que y é uma variável local da função a
Especificações Compatibilidade com navegadores Veja também
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4