Javascript Ninja Legal

Hoje estou aprendendo algumas coisas bacanas com o [John Resig] e logo percebi uma falha no meu Javascript que animava o link do [Feed-me]. Observe o código antigo que anima o link do [Feed-me] é feito assim:

function payAttentionForFeedMe(){
   var link = document.getElementById("feedme");
   setTimeout(function(){ link.style.color = 'red'},    500);
   setTimeout(function(){ link.style.color = 'green'}, 1000);
   setTimeout(function(){ link.style.color = 'blue'},  1500);
   setTimeout(function(){ link.style.color = 'yellow'},2000);
   setTimeout(function(){ link.style.color = 'white'}, 2500);
   setTimeout(function(){ link.style.color = "orange"},3000);
}

E esta é realmente uma forma bruta de realizar a tarefa! Agora por que não fiz um for?

function payAttentionForFeedMe(){
   var link = document.getElementById("feedme");
   var colors = ['red','green','blue','yellow','white','orange'];

   for ( var i = 0; i < colors.length; i++ ){
     setTimeout(function(){ link.style.color = colors[i]}, i * 1000); 
   }  
}

Desta forma com o for tradicional não funciona. Então hoje descobri uma forma ninja de se fazer com uma função anônima no loop.

function payAttentionForFeedMe(){
   var link = document.getElementById("feedme");
   var colors = ['red','green','blue','yellow','white','orange'];

   for ( var i = 0; i < colors.length; i++ ) (function(i){
     setTimeout(function(){ 
        link.style.color = colors[i] 
     }, i * 1000)}
   )(i);
}

Aprendi com [este exemplo].


Share → Twitter Facebook Linkedin


Hello there, my name is Jônatas Davi Paganini and this is my personal blog.
I'm developer advocate at Timescale and I also have a few open source projects on github.

Check my talks or connect with me via linkedin / twitter / github / instagram / facebook / strava / meetup.