Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 + "]");
}À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
}();
geralmente não é bom, pois pode acabar confundindo, e alterar algo global que causa efeitos difíceis de rastrear depois.
a primeira está vendo uma variável de escopo global, e a segunda uma variável de escopo local daquele função.
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.