Foto de Victor S.
Victor há 2 anos
Enviada pelo
Site

Duvida num código simples (iniciante)

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:

var nome = "pedro"
function dizer() {
    console.log(`${this.nome} é legal`)
}

dizer()

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?

 

4 respostas
Professor Angelo R.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 2 anos
Contatar Angelo

É 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




Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Envie uma dúvida grátis
Resposta na hora da Minerva IA e de professores particulares
Enviar dúvida
Professora Talita A.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 ano
Contatar Talita

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!



Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Professor Jonatas M.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 11 meses
Contatar Jonatas

Não precisa usar o  this. 

Pontos de atenção:

  1. Se não for modificar a variável use CONST ao invés de VAR;
  2. Se pretende modificar no futuro, recomendo usar LET, a menos que haja limitações de escopo.

O código ficaria algo como:

var nome = "pedro";
function dizer() {
  console.log(`${nome} é legal`);
}
dizer();

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Professor Elias G.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 9 meses
Contatar Elias

Olá,

var nome = "pedro";

function dizer() {
    console.log(`${nome} é legal`);
}

dizer();



----
Espero ter ajudado!

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Precisa de outra solução? Conheça
Aulas particulares Encontre um professor para combinar e agendar aulas particulares Buscar professor