Let

WIP

Example

for (var i = 0  ; i<=10 ; i++){
  setTimeout(function(){
    console.log(i); //display 6 10 times
  }, i*1000);
}

First attempt to fix

for (var i = 0  ; i<=10 ; i++){
  var a = i;
  setTimeout(function(){
    console.log(a);//display 6 10 times
  }, a*1000);
}

Maybe use scope variable fixing

for (var i = 0  ; i<=10 ; i++){
  (function(i) {
    setTimeout(function(){
      console.log(i);
    }, i*1000);
  })(i);
}

This works but bit verbose;

How about a let

for (var i = 0  ; i<=10 ; i++){
  let a = i;
  setTimeout(function(){
    console.log(a);
  }, a*1000);
}

This works as we are block scoping the var a;