Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Variáveis com o mesmo nome em funções separadas?

Olá pessoal ,

Sabemos até este momento do curso, que variáveis iniciadas dentro da função, não são de escopo global, elas só existem dentro da função, certo?

Mas isso é uma cláusula pétrea ?

Digo isto, pois nesta aula do curso: JS na Web: Manipule o DOM com JavaScript, o professor criou a váriável com o mesmo nome já iniciado antes em uma funções anterior, e essa função nova está sendo chamada dentro da função anterior, que como dito tem a variável com mesmo nome. Mas considerando a interação entre as duas funções, não há situações em que essas variáveis de mesmo nome podem colidir ?

Código da aula e a variável em questão "botaoConclui"

// Concluindo a tarefa

const criarTarefa = (evento)=> {
    evento.preventDefault();

    const input = document.querySelector('[data-form-input]');
    const valor = input.value;
    const lista = document.querySelector('[data-list]');

    const tarefa = document.createElement('li');
    tarefa.classList.add('task', 'done');
    const conteudo = `<p class="content">${valor}</p>`;

    tarefa.innerHTML = conteudo;
    tarefa.appendChild(BotaoConcluir());
    lista.appendChild(tarefa);

    input.value = "";
} 

const novaTarefa = document.querySelector('[data-form-button]');

novaTarefa.addEventListener('click', criarTarefa);

const BotaoConcluir = ()=> {
    const botaoConclui = document.createElement('button'); // variavel de mesmo nome

    botaoConclui.classList.add('check-button');
    botaoConclui.innerText = 'concluir';
    botaoConclui.addEventListener('click', concluirTarefa);
    return botaoConclui;
}

const concluirTarefa = (evento)=> {
    const botaoConclui = evento.target;  // variavel de mesmo nome
    const tarefaCompleta = botaoConclui.parentElement;
    tarefaCompleta.classList.toggle('done');
}
2 respostas
solução!

Bom dia, Davilson! Tudo bem?

Isso mesmo que você falou, as varíaveis que estamos declarando dentro das funções só são utilizadas dentro das funções. Do jeito que estamos fazendo não há o perigo das variáveis com o mesmo nome colidirem: ele irá começar no BotaoConcluir, vai realizar os comandos de dentro de concluirTarefa e depois voltar pro BotaoConcluir. Como o Javascript lê linha por linha não são tarefas acontecendo simultâneamente.

O concluirTarefa não retornar valor nenhum, então o que acontece dentro dele fica dentro dele. Ao fechar as chaves, ele sabe que o botaoConclui do concluirTarefa ficou fechado dentro dele.

Um esqueminha de exemplo de trajetória de leitura da linguagem de programação:

Código da função BotaoConcluir demonstrando que quando chamar o concluirTarefa vai até ele e depois volta para o BotaoConcluir

Mas valeu por trazer o debate sobre isso! Espero ter ajudado ficar um pouco mais claro =)

Bons estudos!

Obrigado Mônica.