Executando verificação de segurança...
2

Primeiramente, muito obrigado pelo seu comentário! É bom como um aspirante a programador ter veteranos como você fazendo críticas e dando dicas, de verdade.

Tá, JavaScript é o que então?

Não sei se compreendi totalmente a diferença entre uma linguagem compilada e interpretada, mas concluí que, quando compilada, o processo de compilação é explícito, e quando interpretada, esse processo torna-se menos visível, porém ambas passam por uma compilação. Ainda não lí os artigos que você anexou, então quando ler talvez minha conclusão seja diferente. Aguarde que retornarei sobre quando tiver mais conhecimento.

Sobre o código

Compreendi agora o funcionamento das variáveis! Realmente, não faz sentido guardar na memória um resultado que vem da invocação da função se não for necessário. Em um caso em que eu devesse guardar a notada de cada aluno faria sentido, porém não é necessário no caso de apenas calcular uma média e imprimí-la. O for of realmente é muito mais funcional nessa situação!

Enfim, obrigado por comentar, está sendo de grande ajuda! Conto com o seu apoio, se possível, em minhas próximas postagens!

Carregando publicação patrocinada...
3

quando compilada, o processo de compilação é explícito, e quando interpretada, esse processo torna-se menos visível

Não. Tanto faz se o processo de compilação é explícito ou implícito. O fato de estar "escondido" não a torna "interpretada".

O que eu quis dizer é que essa separação entre "compilado" e "interpretado" não é tão simples assim. Na prática, não existe mais essa coisa de que uma linguagem só pode ser um dos dois.

Hoje em dia as implementações são softwares complexos e os conceitos acabam se misturando. Engines como o V8 (e os outros já citados) possuem vários componentes, cada um deles complicado por si só (compilador para gerar o bytecode, VM para executá-lo, JIT, etc). E cada um desses componentes pode ser composto por vários outros (apenas um compilador, por exemplo, é um software complexo por si só).

Então na prática o que temos hoje para muitas linguagens é um "híbrido": algumas partes podem ser compiladas, outras podem ser interpretadas, e outras partes que já foram compiladas podem ser novamente - como é o caso do JIT. E cada uma destas etapas pode ter outras intermediárias (exemplo de como ocorre em Java). Então se algumas partes são uma coisa e outras partes são outra coisa, não tem como dizer que é somente uma dessas coisas.

E - novamente - tanto faz se a compilação é explícita ou não. Se tem compilação, não dá pra dizer que é interpretada. Algumas partes podem ser, como é o caso da VM interpretando o bytecode. Mas só por causa disso vai dizer que é tudo interpretado?

Enfim, tire da cabeça essa ideia de que só existem dois grupos excludentes ("compilada" e "interpretada"), e cada linguagem só pode se encaixar em um deles. Pra mim, esta visão está ultrapassada. O que vemos de fato é que muitas implementações fogem completamente deste modelo "só pode ser um". Na verdade, vejo que muitas linguagens - principalmente as mainstream - têm optado pela abordagem "híbrida" com geração de bytecode, que roda em (ou é interpretado por) uma VM, que pode ou não ter um JIT (até PHP tem JIT, a partir da versão 8).