Codar.me
789 subscribers
40 photos
26 videos
1 file
64 links
Se você busca evoluir como #dev e criar software de qualidade, está no lugar certo! Aqui vamos compartilhar conhecimento e novidades da Codar.me pra te ajudar nessa jornada! 🚀👊
Download Telegram
Como você aprende mais: Lendo? Escutando? Vendo? Segundo a Pirâmide do aprendizado, de William Glasser, nós aprendemos mais quando estamos.... ensinando! Sim isso mesmo. É por isso que eu digo que é importante criar conteúdo, seja em texto ou seja em video!
E a nossa comunidade no discord é um ótimo lugar pra você começar, bora!!!
Se você não acertou, não tem problema, você vai se surpreender com a explicação:
Isso é possível pois funções são objetos no javascript!!!

Tudo no js (exceto os tipos primitivos) são objetos! E uma função é um tipo especial de objeto, chamado function object. E não é uma função de verdade, e sim um objeto com propriedades invocáveis.
Um function object inclui uma string com o código da função (sim, string!) e, isso aqui, apesar de funcionar, não é recomendado:

var body = ‘return console..log(“Você conhece JS?”)’;
var log = new Function(“log”, body);
log() // => Você conhece JS
Codar.me pinned a voice message
Codar.me
https://instagram.com/stories/codar.me/2313973482590946088
Questão básica, mas que a maioria erra por não estudar o básico!!! Amanhã mando a resposta com explicação aqui pra dar tempo da galera quebrar a cabeça 😁
Codar.me
Photo
Resposta da questão do Insta:

O for vai iterar até o limite de itens do array, então a variável “i” será 0, depois 1, depois 2, depois 3.
Como temos um setTimeout, que é um método que recebe um callback e executa ele assincronamente, e como colocamos um delay de 2 segundos (2000), quando o callback é executado, uma coisa curiosa acontece, ele vai logar 4 vezes “undefined”. Se você logar só o “i” dentro do setTimeout, vai perceber que ele logs 4 vezes o número 4.

Mas peraí, ele não vai só até 3 (que é o limite de indices do array? Como ele loga 4 então?
Bom, a instrução que demos foi “i < arr.length”. No caso, 3 (que é o último índice) não é menor que arr.length, então ele continua incrementando, e quando chega no 4, vê que é menor que arr.length e para a execução, porem a variável “i” agora é 4.
Como temos um callback assíncrono com setTimeout, quando esse callback for chamado, “i” é 4 e por isso não existe no array, retornando “undefined”.
Podemos resolver isso de várias formas, mas a mais simples é: var é uma variável de escopo global, ou seja, independente de onde ela é criada, pode ser acessada de qualquer lugar.
Precisamos deixar o escopo da variável “i” apenas dentro do bloco for, que assim, a cada iteração, será criada uma variável nova, e não alterada a antiga. Assim, podemos usar let, ao invés de var, já que let tem escopo de bloco, e a cada iteração ela fica “presa” no bloco anterior.

Resumindo:
1. Problema: o código vai logar 4 vezes undefined
2. Solução: trocar var por let
Vamos começar a criar o novo site da Codar.me, e você pode acompanhar e interagir durante esse processo. Sabe como? Vai ter live code! E vai começar hoje, as 19h no nosso canal recém criado da Twitch.tv bora lá? https://www.twitch.tv/codarme