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

Dúvida Let Livros - Escopo Global

Olá

Fiquei com uma dúvida sobre o método filter no exemplo da aula 3.

main.js

let livros = [];
const endpointDaAPI = 'https://guilhermeonrails.github.io/casadocodigo/livros.json';

getBuscaLivrosDaAPI();

async function getBuscaLivrosDaAPI(){
    try{
        const resposta = await fetch(endpointDaAPI);
        livros = await resposta.json();
        //console.table(livros);
        let livrosComDesconto = aplicarDesconto(livros);

        exibirLivrosNaTela(livrosComDesconto);
    }catch(erro){
        console.log(erro);
    }
}

filter.js 

const botoes = document.querySelectorAll('.btn');
botoes.forEach(btn => btn.addEventListener('click', filtrarLivros));

function filtrarLivros() {
    //This significa o botão clicado, ou seja, houve um click, this.id identifica qual o botão clicado
    const elementoBtn = document.getElementById(this.id);
    let livrosFiltrados = livros.filter(livro => livro.categoria == elementoBtn.value);
    exibirLivrosNaTela(livrosFiltrados);


}

A dúvida é a seguinte:

No filter usamos a variável livros declarada em main. Gostaria só de entender um pouco melhor sobre este escopo global que o professor menciona da variável livros.

Quando carregamos a página ela é alimentada com o json.

No momento que ela recebe os dados estes ficam salvos nesta variável e após o click em cada botão o filtro é aplicado e sucessivamente aos clicks vai filtrando.

Este array livros fica permanente na memória enquanto permanecemos nesta página e pode ser manipulado mesmo sem precisar recarregar a página para buscar os dados novamente ?

Espero ter conseguido me expressar bem na minha dúvida, pois gostaria de entender um pouco melhor sobre este escopo e sobre os dados que permanecem na variável.

3 respostas
solução!

Olá Ricardo,

Entendi sua dúvida sobre o escopo global da variável "livros" no exemplo apresentado na aula 3 do curso de JavaScript.

Quando declaramos uma variável fora de uma função, ela se torna global e pode ser acessada por qualquer função dentro do mesmo escopo. No caso do exemplo apresentado, a variável "livros" foi declarada fora da função "getBuscaLivrosDaAPI" e, por isso, pode ser acessada pela função "filtrarLivros".

Quanto à sua pergunta sobre a permanência dos dados do array "livros" na memória, a resposta é sim. Quando os dados são carregados a partir da API e salvos na variável "livros", eles permanecem na memória enquanto a página estiver aberta. Isso significa que, ao clicar nos botões de filtro, o array "livros" será filtrado com base nos dados que foram carregados inicialmente, sem a necessidade de buscar os dados novamente na API.

Espero ter esclarecido sua dúvida. Se precisar de mais informações, é só perguntar.

Espero ter ajudado e bons estudos!

Perfeito Renan

Entendi, seu retorno com certeza ajudou nos meus estudos pois ficou claro o funcionamento e sanei minha dúvida sobre a permanência dos dados na memória.

Este entendimento vai me auxiliar em algumas aplicações que quero fazer usando este exemplo.

Muito obrigado.

Abraço

Eu que agradeço Ricardo. Fico feliz em ajudar :)