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
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
Esse site é sensacional pra quem quer aprender git de verdade, avançado! https://learngitbranching.js.org/?locale=pt_BR
learngitbranching.js.org
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
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
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
Twitch
codarme - Twitch
codarme streams live on Twitch! Check out their videos, sign up to chat, and join their community.
A Amazon disponibilizou vários livros 💡 DE GRAÇA 😍 por um período limitado. Totalizando quase 400 mil reais em desconto 🙃.
🤓 50.000 eBooks grátis - Amazon
Acesse a Coleção completa:
➡ https://amzn.to/2TGg3Wu
Acesse por área:
🏠 Home Office
350 ebooks https://amzn.to/3c1j5e3
👩🏻💼 Administração, Negócios e Economia
1250 ebooks https://amzn.to/2M0emih
🤝 Autoajuda
238 ebooks https://amzn.to/36DprQ0
🖥 Computação, Informática e Mídias Digitais
42 ebooks https://amzn.to/3d68YWN
🙏 Religião e Espiritualidade
130 ebooks https://amzn.to/3d3rVJD
🍽 Gastronomia e Culinária
760 ebooks https://amzn.to/2yCjBBO
🦸🏻♀ HQs, Mangás e Graphic Novels
32 ebooks https://amzn.to/2B3zKB6
👶🏻 Infantil
109 ebooks https://amzn.to/2M1FA89
👔 Política
213 ebooks https://amzn.to/2X44wm4
👩🏼⚕ Medicina
180 ebooks https://amzn.to/2X0R5mO
👮🏻♀Policial, Suspense
52 ebooks https://amzn.to/2Ae1KRS
-
❣️ E Ainda tem mais 👇🏻👇🏻
🖥 Ebooks acima de 4 estrelas abaixo de R$ 10 de #Tecnologia
https://amzn.to/2XtsING
💡 Ebooks gerais acima de 4 estrelas abaixo de R$ 10
https://amzn.to/3goXAr5
🤓 50.000 eBooks grátis - Amazon
Acesse a Coleção completa:
➡ https://amzn.to/2TGg3Wu
Acesse por área:
🏠 Home Office
350 ebooks https://amzn.to/3c1j5e3
👩🏻💼 Administração, Negócios e Economia
1250 ebooks https://amzn.to/2M0emih
🤝 Autoajuda
238 ebooks https://amzn.to/36DprQ0
🖥 Computação, Informática e Mídias Digitais
42 ebooks https://amzn.to/3d68YWN
🙏 Religião e Espiritualidade
130 ebooks https://amzn.to/3d3rVJD
🍽 Gastronomia e Culinária
760 ebooks https://amzn.to/2yCjBBO
🦸🏻♀ HQs, Mangás e Graphic Novels
32 ebooks https://amzn.to/2B3zKB6
👶🏻 Infantil
109 ebooks https://amzn.to/2M1FA89
👔 Política
213 ebooks https://amzn.to/2X44wm4
👩🏼⚕ Medicina
180 ebooks https://amzn.to/2X0R5mO
👮🏻♀Policial, Suspense
52 ebooks https://amzn.to/2Ae1KRS
-
❣️ E Ainda tem mais 👇🏻👇🏻
🖥 Ebooks acima de 4 estrelas abaixo de R$ 10 de #Tecnologia
https://amzn.to/2XtsING
💡 Ebooks gerais acima de 4 estrelas abaixo de R$ 10
https://amzn.to/3goXAr5
Explicando a resposta:
Uma função assíncrona sempre retorna uma promise. Portanto, quando chamamos “getData”, uma promise pendente será retornada ao invés de a variável “data” receber o valor da promise resolvida.
Se quisessemos pegar o valor da primes resolvida (“Resolved!”), precisaríamos usar “.then” nesse contexto.
data.then(resolved => console.log(resolved))
Isso iria logar “Resolved!”
Uma função assíncrona sempre retorna uma promise. Portanto, quando chamamos “getData”, uma promise pendente será retornada ao invés de a variável “data” receber o valor da promise resolvida.
Se quisessemos pegar o valor da primes resolvida (“Resolved!”), precisaríamos usar “.then” nesse contexto.
data.then(resolved => console.log(resolved))
Isso iria logar “Resolved!”
Quem ta acompanhando os stories ai, respondi uma pergunta sobre fracasso, e recomendei o livro Princípios, de Ray Dalio. Aqui tem um video sobre o livro, muito legal https://www.youtube.com/watch?v=izbLkrzejxU
YouTube
Princípios para o Sucesso - A Chamada Para A Aventura - Episódio 1
Esse vídeo foi publicado originalmente no site do Ray Dalio - www.principles.com e é um resumo do livro "Principles", uma excelente obra desse empresário super bem sucedido. Como ainda não tem a tradução do livro ou o vídeo legendado em Portugues, resolvi…
E o Arthur deu a dica no insta, vou repassar aqui, esse podcast (esse episodio) fala sobre falha também https://open.spotify.com/episode/0jQe4PuvJnSBIZ5qCC7gHT?si=Tu48e9I2Q5ebfqPCIKQboA
Spotify
Fail Better: Embracing Failure
Listen to this episode from Command Line Heroes on Spotify. Failure is the heartbeat of discovery. We stumble a lot trying new things. The trick is to give up on failing fast. Instead, fail better. This episode looks at how tech embraces failure. Approaching…
Galera, pesquisa rápida: quanto tempo vc está na área de tecnologia (desenvolvimento de software)?
Anonymous Poll
42%
Menos de 1 ano
28%
De 1 a 3 anos
11%
De 3 a 6 anos
10%
De 6 a 10
9%
Mais que 10
Galera, vamos continuar o site novo da codar.me? Live Code amanhã no http://twitch.tv/codarme as 19h!
Twitch
codarme - Twitch
codarme streams live on Twitch! Check out their videos, sign up to chat, and join their community.