Olá, sou iniciante na programacao e estava pondo em pratica algumas coisas que aprendi mas me deparei um problema que estou tendo, segue o código abaixo:
Ao executar o código no VS Code retorna o valor undefined, porém ao executar o código no browser retorna "Pedro é legal", o que pode estar acontecendo?
É preciso entender contexto/escopo em Javascript para entender o this.
As variáveis declaradas dentro da funções possuem contexto local.
As variáveis declaradas fora da função possuem contexto global.
Você pode passar parâmetro(s) para a função:
const name = 'nome aqui'
function greeting(name) {
return `Olá ${name} !`)
}
// para executar a função
greeting()
${} - Sobre o template string - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
this - Sobre o this - https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/this
O comportamento diferente que você está observando ao executar o mesmo código no VS Code e no navegador pode estar relacionado ao fato de que o escopo do objeto global (window
no navegador, ou global
no Node.js) é tratado de maneira diferente em cada um desses ambientes.
No navegador, o objeto window
é o escopo global padrão, e todas as variáveis e funções globais são definidas nesse objeto. Quando você define a variável nome
fora da função dizer()
, ela se torna uma propriedade do objeto global window
, e pode ser acessada em qualquer lugar do código.
Já no ambiente do Node.js, o escopo global é o objeto global
, e não há uma propriedade global nome
definida. Por isso, quando você chama a função dizer()
no Node.js, o valor de this.nome
é undefined
.
Para corrigir esse problema, você pode passar o valor de nome
como um argumento para a função dizer()
, em vez de usá-lo como uma propriedade do objeto global. Assim, a função terá acesso ao valor correto de nome
, independentemente do ambiente em que estiver sendo executada.
function dizer(nome) {
console.log(`${nome} é legal`);
}
var nome = "Pedro";
dizer(nome);
Dessa forma, o valor "Pedro é legal" será impresso corretamente no console, tanto no ambiente do Node.js quanto no navegador.
Espero que isso ajude!
Não precisa usar o this.
Pontos de atenção:
O código ficaria algo como:
Olá,
var nome = "pedro";
function dizer() {
console.log(`${nome} é legal`);
}
dizer();
----
Espero ter ajudado!