[Codeminer42 Brownbags] JavaScript - as partes essenciais
Vamos falar sobre as partes essenciais que compõe a espinha dorsal do JavaScript. Partes que talvez você não saibam que existem ou o quanto impactam no código que você escreve no dia-a-dia, mas elas sempre estiveram ali!
ativa - Várias ferramentas, bibliotecas, frameworks - É comum focarmos nas ferramentas, e esquecermos a base: a linguagem - O essencial é tudo da linguagem que vai te perseguir não interessa qual ferramenta use - Não saber o essencial significa não usar todas as vantagens oferecidas pela linguagem 3
first-class citizens - Funções são tratadas como qualquer outra variável - Passadas como argumento e também retornadas - Uma função passada como argumento é chamada de callback - Um callback só é invocado quando a função que o recebe decide chamá-lo
é seu contexto atual - Composto por valores acessíveis naquele ponto - Este escopo inclui tanto valores dentro da própria função quanto valores do escopo superior ao atual - Uma função que acessa valores de um escopo pertencente à outra função é chamada de closure - Closures permitem que função “carreguem valores”
2 tipos principais de funções - Arrow functions foram adicionadas mais recentemente à linguagem - A diferença das duas não se restringe à sintaxe - Funções possuem uma variável especial: this - Conseguimos manipular o valor de this - Mas, arrow functions trabalham diferente com o this
pelo JS - Podemos dizer que JS não tem realmente classes, a sintaxe class é apenas um atalho para prototypes - O prototype de um objeto define quais métodos e propriedades ele terá quando instanciado - Tipos primitivos também acessam prototypes - Eles podem ser modificados depois de definidos, e isso permite uma grande funcionalidade: polyfill
o resultado (sucesso/falha) eventual de uma operação assíncrona - Surgiram como uma melhor forma de organizar o uso de callbacks aninhados para assincronia - Não é possível "tirar o valor" de uma promise - Acessamos este resultado através de um callback - async/await é uma feature baseada em promises que melhora a ergonomia das promises