Conceitos fundamentais sobre o ciclo de vida do Javascript Flashcards
Conceitos básicos sobre o funcionamento do Javascript
Para que é usada a diretiva use strict em um arquivo JS?
Garante uma série de validações com o objetivo de evitar erros de semânticas silenciosas no JS.
Exemplos: atribuir valores a variáveis inexistentes, criar variáveis com palavras reservadas…
Quais são todos os tipos primitivos do JS?
number, string, boolean, null, undefined, symbol
O que significa dizer que tipos primitivos são imutaveis?
Significa que o valor de uma variável de um tipo primitivo não pode mudar.
O que não significa que a variavel não pode ser reatribuída com um novo valor. Mas na memória é criado uma nova referência, enquanto a antiga permanece intacta.
O que é e o que faz o Garbage Collection do JS?
No JS tem um garbage collection automatico que quando uma variável não tem mais referencias no código, ela é limpa da memória. Isso faz com que a linguagem não seja tão otimizada como o C por exemplo onde o próprio programador precisa limpar a memoria.
O que são: a Call stack e a memory heap?
A call stack é a pilha de armazenamento de ações do JS, é uma pilha “Last In, First Out” que o JS mantém as chamadas do código.
A memory heap é onde o JS mantém os valores de tipos não primitivos que podem crescer dinamicamente e de forma desordenada (Objects e Arrays)
Cite exemplos de erros comuns que podem resultar em vazamento de memória
As principais formas de gerar um vazamento de memória no JS são: criar muitas variáveis globais, adicionar event listeners e não remove los quando não são mais necessários, uso da função setInterval com um callback (só é limpo da memória quando o setInterval em si é removido)
O que significa que uma função é pura no JS? E qual o impacto das funções impuras?
Funções puras não alteram variáveis fora do seu escopo, enquanto funções consideradas inpuras alteram objetos passados por parametro.
Como todo objeto passado como argumento para uma função é apenas uma referência, qualquer mudança no objeto vai alterar o objeto principal e não apenas no escopo da função, isso pode ser um comportamento indesejado.
O que é coerção implícita?
Coerção implícita é a que acontece de forma “automática” pela linguagem, sem o programador ter explicitamente convertido algum valor, como por exemplo na sintaxe de comparação 32 == “32” // true.
O que é coerção explícita?
A Coerção explicita é feita através de métodos que a própria linguagem nos provem para essa finalidade. Tal como String(1) por exemplo.
Por que devemos evitar o uso do equality operator (==) e priorizar o uso do strict equality operator (===)?
Por que o equality operator (==) faz coerções implícitas podendo gerar comportamentos indesejados e imprevisíveis no código.
Qual o conteudo da variável result no código abaixo:
const result = “hello” || 1;
O valor da variável é “hello” pois quando usamos duplo pipe e o resultado da operação é verdadeiro é retornado o primeiro valor testado.
obs: As expressão de exemplo não retornam um boolean, mas sim um valor que dentro do IF é feito uma coerção implícita que torna o valor um booleano.
Qual o conteudo da variável result no código abaixo:
const result = “hello” && 1;
O valor da variável é 1 pois quando usamos duplo and e o resultado da operação é verdadeiro é retornado o último valor testado.
obs: As expressão de exemplo não retornam um boolean, mas sim um valor que dentro do IF é feito uma coerção implícita que torna o valor um booleano.
O que acontece no código abaixo:
const eu = {
name: “Vitor”,
year: 1997,
toString() {
return “isso e uma string”;
},
valueOf() {
return 0;
},
[Symbol.toPrimitive] (coercionType) {
return 7;
}
}
console.log(eu + 3)
O resultado será 10 pois o método Symbol.toPrimitive tem preferencia sob os outros métodos chamados na coerção de objetos.
Lembrando que para operações de string é chamado o método toString() e para operações numericas é chamado o valueOf(), porém o Symbol.toPrimitive tem preferência sobre esses métodos.
O que é o Prototype Chain?
Prototype chain é o nome do processo de pesquisa que o JS faz para pesquisar entre classes herdadas em busca de uma determinada propriedade. Quando tentamos buscar a existência de uma propriedade em um objeto o motor de busca do JS vai verificar se essa propriedade existe no objeto e caso não ache vai procurar no prototype do objeto e caso não exista vai buscar no prototype do prototype, assim sucessivamente até chegar na raiz que é null.
O que é a propriedade .__proto__ de um objeto?
.__proto__ é a referência do objeto que possui as propriedades dele