2
respostas

[Dúvida] Não entendi o uso da variável 'tarefa'

Não ficou muito claro pra mim o por quê de a gente poder usar a variável 'tarefa' no li.onclick =()=>{}. Sendo que a gente nem passou ela como argumento pra essa função. Não consegui entender de onde o JS tá puxando essa informação da 'tarefa'.

 li.onclick = () => {
    document.querySelectorAll('.app__section-task-list-item-active')
    .forEach(elemento => {
        elemento.classList.remove('app__section-task-list-item-active');
    })

    if(tarefaSelecionada == tarefa) {
        paragrafoDescricaoTarefaAndamento.textContent = '';
        tarefaSelecionada = null;
        return
    }

        tarefaSelecionada = tarefa;
2 respostas

Olá, Daniel!

Primeiramente, excelente pergunta. Esse tipo de curiosidade e questionamento é muito importante na vida de dev :)

Agora, vamos lá.

Na função criarElementoTarefa, a variável tarefa é acessível dentro do event handler (manipulador de evento) li.onclick devido ao escopo em que foi definida.

Quando a gente cria a função criarElementoTarefa, a tarefa é passada como um argumento para esta função. Isso significa que tarefa está disponível em todo o corpo da função criarElementoTarefa, incluindo quaisquer funções internas definidas dentro dela, como é o caso com a função anônima usada em li.onclick.

O JavaScript utiliza um conceito chamado escopo léxico. Isso significa que funções internas têm acesso às variáveis definidas nos escopos exteriores ao dela.

É por isso que a função anônima dentro de li.onclick tem acesso à variável tarefa, porque tarefa é parte do escopo em que a função anônima foi criada.

Isso é bacana porque permite que a função que manipula o evento onclick interaja com os dados da tarefa específica associada ao elemento li que foi clicado, mesmo sem passar tarefa explicitamente para ela. Quando o evento onclick é acionado, a função pode utilizar tarefa para executar a lógica necessária, como atualizar a descrição da tarefa ou alterar seu status de seleção.

Isso faz com que o código mantenha uma ligação entre a ação de clique e a instância específica da tarefa sendo manipulada naquele momento, sem a necessidade de passar tarefa como um argumento para a função onclick ou usar variáveis globais.

Era essa sua dúvida? :) Qualquer coisa me chama de novo!

Abração.

Valeu pela explicação! Era essa a dúvida mesmo. Ainda fico um pouco confuso de quando uma fç vai precisar ou não de parâmetros, mas acho q isso vem tbm com o tempo né?