Javascript
Javascript
Closure (Fechamentos)
Closures são funções que se lembram do ambiente em que foram criadas. Isso significa que uma função interna tem
sempre acesso às variáveis e parâmetros da função externa, mesmo após a função externa ter terminado de executar.
2. Hoisting
Hoisting é o comportamento padrão do JavaScript de mover declarações para o topo de um escopo (global ou da
função em que reside). Isso significa que você pode chamar funções e referenciar variáveis em código antes mesmo
delas serem declaradas, mas isso se aplica de maneira diferente para variáveis (com var) e funções.
O modelo de concorrência do JavaScript é baseado em um "loop de eventos". JavaScript tem uma pilha de chamadas
única e não bloqueante, o que significa que operações como I/O não pausam a execução do código. Entender como
operações assíncronas são tratadas através de callbacks, Promises e async/await é crucial.
4. Prototipagem e Herança
JavaScript é uma linguagem baseada em protótipos para herança. Cada objeto em JavaScript tem uma propriedade
interna, chamada de [[Prototype]], que é um link para outro objeto. Quando você tenta acessar uma propriedade de
um objeto, o JavaScript primeiro procura no próprio objeto, e se não encontrar, ele procura no [[Prototype]] do
objeto, e assim por diante.
5. this Keyword
O valor de this dentro de uma função depende de como a função é chamada. Ele pode variar se a função é chamada
como um método de um objeto, como um construtor, como uma função regular ou no contexto global. Diferentes
modos de invocação (call, apply, bind) podem ser usados para especificar o valor de this.
let tem escopo de bloco, não pode ser redeclarada no mesmo escopo, mas pode ser atualizada.
const também tem escopo de bloco, não pode ser redeclarada nem atualizada (embora objetos atribuídos a uma
const possam ter suas propriedades mutadas).
7. Async/Await
async e await são extensões de Promises que simplificam o trabalho com operações assíncronas, permitindo escrever
código assíncrono que parece síncrono. Uma função marcada como async pode usar await para pausar a execução até
que uma Promise seja resolvida.
JavaScript tem tipos primitivos (string, number, bigint, boolean, undefined, symbol, e null) e objetos (incluindo arrays,
funções, e objetos literais). Entender como manipular esses tipos, incluindo operações comuns de array como map,
filter, e reduce, é importante.
O operador spread (...) permite que elementos de iteráveis (como arrays) sejam expandidos em locais onde múltiplos
argumentos ou elementos são esperados. Rest parameters também usam a sintaxe ... e permitem representar um
número indefinido de argumentos como um array.
10. Destructuring
A atribuição via desestruturação é uma expressão JavaScript que possibilita extrair dados de arrays ou propriedades
de objetos em variáveis distintas.