Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wilson Batista

escopos de variáveis em javascript

Recommended Posts

Boa tarde galera do imasters

 

Estou com uma dúvida sobre escopos de variáveis declaradas fora e dentro de funções, vamos para um exemplo:

function fazAlgumaCoisa1() {
    console.log("função 1: [" + numeros + "]");
}
function fazAlgumaCoisa2() {
    var numeros = [40, 30, 20, 10];
    console.log("função 2: [" + numeros + "]");
}

var numeros = [1, 2, 3, 4];
fazAlgumaCoisa1();
fazAlgumaCoisa2();
console.log("lado de fora: [" + numeros + "]");        
Minhas dúvidas são:
1º Na primeira função, ela usou uma variável que foi declarada fora de todas as funções, bom isso é correto de se fazer? pegar variáveis declaradas que está fora do escopo da função?
2º Qual a diferença de uso da variável números da primeira função pra segunda função?
3º Se as funções necessitar de pegar alguma variável fora do seu escopo, essas variáveis precisa ser globais ou o correto é não pegar variáveis globais e sim passar essas variáveis que estão fora do escopo da função, por um parâmetro desta função?? um exemplo abaixo:
var numeros = [1,2,3,4];

// Uma forma global, seria uma forma correta de se passar as variáveis para as funções?
function fazAlgumaCoisa1() {
    console.log("função 1: [" + numeros + "]");
}

// Ou essa forma abaixo seria a mais correta, passando as variáveis por um parâmentro ?
function fazAlgumaCoisa1(numeros) {
    console.log("função 1: [" + numeros + "]");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

1º Na primeira função, ela usou uma variável que foi declarada fora de todas as funções, bom isso é correto de se fazer? pegar variáveis declaradas que está fora do escopo da função?

geralmente não é bom, pois pode acabar confundindo, e alterar algo global que causa efeitos difíceis de rastrear depois.

2º Qual a diferença de uso da variável números da primeira função pra segunda função?

a primeira está vendo uma variável de escopo global, e a segunda uma variável de escopo local daquele função.

3º Se as funções necessitar de pegar alguma variável fora do seu escopo, essas variáveis precisa ser globais ou o correto é não pegar variáveis globais e sim passar essas variáveis que estão fora do escopo da função, por um parâmetro desta função?? um exemplo abaixo:

vc não deveria pegar variáveis globais, ou se pegar, não deveria nunca alterar o valor delas, pelo motivo que citei na primeira resposta.

 

O mais recomendado é injetar essa variável como argumento, e então calcular o que vc precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Às vezes é útil usar variáveis de níveis superiores na cadeia de escopo. Fazemos isto, por exemplo, pra tirar proveito de closures.

 

Ainda assim é bom minimizar o uso de variáveis globais. O que eu costumo fazer pra conter o escopo das minhas declarações é usar uma função anônima que envelopa tudo e é executada imediatamente:

 

void function () {

// código

}();

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.