Javascript essentials Flashcards
Conceitos básicos e essenciais do javascript
Explique este conceito essencial do Javascript:
É JavaScript single-threaded?
Javascript em si mesmo não é single-threaded nem multi-threaded. A linguagem não tem nada a ver com threading. É somente um conjunto de instruções para a plataforma gerenciar. A plataforma lida com essas instruções do seu próprio jeito, seja de uma maneira single-threaded ou multi-threaded.
Explique este conceito essencial do Javascript:
Como funciona o V8 engine?
V8 compila o código Javascript, o parser gera uma árvore de sintaxe abstrata (abstract syntax tree). Ignition
, o interpretador, gera bytecode (uma abstração de código de maquina) desta árvore. TurboFan
, o compilador otimizador, eventualmente pega o bytecode e gera um codigo de maquina otimizado a partir dele.
Understanding V8’s Bytecode
https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775
Explique este conceito essencial do Javascript:
Explique o loop de eventos em JavaScript
Event loop
O loop de eventos é um componente central do ambiente de execução do JavaScript, responsável por agendar e executar tarefas assíncronas.
Ele funciona monitorando duas filas: a pilha de chamadas (call stack) e a fila de eventos. A pilha de chamadas é uma estrutura de dados LIFO que armazena as funções em execução.
Operações assíncronas, como setTimeout
, requisições fetch
e promises
, são gerenciadas pelas Web APIs, que utilizam threads do thread pool para completar tarefas sem bloquear a thread principal.
A fila de microtarefas (job queue) é uma estrutura FIFO que armazena callbacks de async/await, promises e process.nextTick()
prontos para execução, enquanto a fila de macrotarefas (task queue) gerencia callbacks de operações assíncronas como setTimeout
e setInterval
. O loop de eventos monitora constantemente a pilha de chamadas e, quando ela está vazia, busca na fila de microtarefas ou macrotarefas callbacks prontos para serem executados.
JavaScript Event Loop Explained
https://medium.com/front-end-weekly/javascript-event-loop-explained-4cd26af121d4
Explique este conceito essencial do Javascript:
Qual a diferença entre var, let e const?
var
tem escopo de função, let
e const
têm escopo de bloco. const
não permite reatribuição, enquanto let
permite.
Explique este conceito essencial do Javascript:
Quais são os diferentes tipos de dados em JavaScript?
Tipos primitivos: string, number, boolean, null, undefined, symbol. Estes tipos são imutáveis, ou seja, seus valores não podem ser mudados.
Tipos de referencia: object e array. Estes tipos armazenam um ponteiro de referencia aos dados, significando que se fossem designados a outras variaveis, essas variaveis, ao serem modificadas, alterariam o valor do objeto original.
33 Concepts Every JavaScript Developer Should Know
https://blog.codingwinner.com/33-concepts-every-javascript-developer-should-know-ef225a72ed7f
Explique este conceito essencial do Javascript:
O que é uma função de callback e o que é callback hell?
Callback é uma função passada como argumento para outra. Callback hell ocorre quando há muitos callbacks aninhados, tornando o código difícil de manter.
Explique este conceito essencial do Javascript:
O que é uma Promise e um encadeamento de Promises?
Promises & Chaining Promises
Uma Promise representa o resultado de uma operação assíncrona futura.
Um encadeamento de Promises permite executar uma sequencia de operações assíncronas de maneira ordenada.
fetch('https://api.example.com/data') .then(response => response.json()) .then(data => { console.log('Data:', data); return fetch('https://api.example.com/more-data'); }) .then(response => response.json()) .then(moreData => { console.log('More Data:', moreData); }) .catch(error => { console.error('Error:', error); });
Explique este conceito essencial do Javascript:
O que é async/await?
Fornece uma maneira de escrever código asincrono que “tem aparencia” e “se comporta” como código asincrono, melhorando a legibilidade e manutenção.
async function fetchData(url) { try { const response = await fetch(url); const data = await response.json(); console.log(data); } catch (error) { console.error('Error fetching data:', error); } } fetchData('https://api.example.com/data');
Explique este conceito essencial do Javascript:
Qual a diferença entre os operadores == e ===?
Loose equality & strict equality
==
compara apenas valores, ===
compara valores e tipos, sendo mais estrito.
Explique este conceito essencial do Javascript:
Quais são as diferentes maneiras de criar um objeto em JavaScript?
Através de literais, construtores, Object.create(), e classes.
Explique este conceito essencial do Javascript:
O que são os operadores rest e spread?
rest coleta múltiplos argumentos em um array; spread espalha os elementos de um array ou objeto, permitindo facilmente clonar arrays, concatenar arrays, e mergear objects.
Explique este conceito essencial do Javascript:
O que é uma função de ordem superior (higher-order function)?
É uma função que aceita outra função como argumento ou retorna uma função como resultado.
Explique este conceito essencial do Javascript:
O que é Closure? Quais são os casos de uso de Closures?
Closure é quando uma função lembra do escopo em que foi criada, ou seja, tem acesso às variaveis definidas no escopo onde a função foi criada. Como resultado, mesmo que a função acima onde foi invocada a função closure finalize, as variáveis continuarão retidas na memória até a execução da função closure. Isto pode causar “memory leaks” se não for usado com cuidado.
É útil para encapsular estados e criar funções privadas, expondo assim somente a funcionalidade necessária.
function createCounter() { let count = 0; return { increment() { count++; return count; }, decrement() { count - ; return count; }, }; } const counter = createCounter(); console.log(counter.increment()); // 1 console.log(counter.increment()); // 2 console.log(counter.decrement()); // 1
Explique este conceito essencial do Javascript:
Explique o conceito de hoisting em JavaScript.
Hoisting é o comportamento padrão do Javascript de mover declarações de variáveis e funções para o topo de seu escopo antes da execução. Conceitualmente esta definição dá a entender que as declarações de variáveis e funções são movidas (içadas) fisicamente, mas não é isso o que acontece. Em vez disso, são colocadas na memória durante a fase de compilação, mas permanecem exatamente onde você as digitou no seu código.
O Hoisting permite que você execute funções antes das suas declarações. Por exemplo:
console.log(soma(2, 5)) function soma(a, b) { return a + b }
function soma(a,b){ return a + b } console.log(soma(2,5))
O JavaScript apenas eleva (hoists) as declarações, não as inicializações. Se uma variável for declarada e inicializada após usá-la, o valor será undefined. Por exemplo:
console.log(num); // Retorna undefined var num; num = 6;
Explique este conceito essencial do Javascript:
O que é a zona morta temporal (Temporal Dead Zone)?
É o período entre a criação de uma variável com let
ou const
e sua inicialização, onde acessá-la resulta em erro.