Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

porque o array livros já veio preenchido?

no main criamos o array livros e deichamos ele vazio

let livros = [];

dentro da função getBuscarLivrosDaApi foi que atribuimos o a variável res com a requisição dos livros para ele. então quando no metodoFilter, que é outro arquivos de js, declaramos que a variável livrosFiltrados é igual a livro porqueo js ja sabe que queremos usar o array ja preenchido e não vazio? é porque importamos o script no html depois do main?

let livrosFiltrados = livros.filter(livro => livro.categoria == 'front-end')
1 resposta
solução!

Oii, Geraldo. Tudo bem?

O array livros começa vazio, mas é preenchido com os dados da API dentro da função getBuscarLivrosDaAPI(). Isso acontece de forma assíncrona, ou seja, o código continua executando enquanto a requisição tá sendo feita. O livros.filter() que você mencionou só funciona corretamente porque o array livros já foi preenchido antes de ser utilizado.

Sobre a ordem dos scripts, sim, é importante que o script que realiza a requisição e preenche o array livros seja carregado antes de qualquer outro script que dependa desse array. Normalmente, isso é garantido pela ordem de inclusão dos scripts no HTML, mas em projetos maiores, é comum utilizar técnicas como async/await ou promises para garantir que tudo aconteça na ordem certa.

Espero ter ajudado.

Um abraço e bons estudos.