let in loops

# Salvador de la Puente González (11 years ago)

Hello, recently I read about let inside for loops. According to leanpub.com/understandinges6/read#leanpub-auto-block-bindings

let allows the developer to make:

function test() {
  for (let i=0; i<10; i++) {
    setTimeout(() => console.log(i));
  }
}

And this will print 0, 1, 2... instead of 10, ten times. Why? Is let involving more than a "avoid-hoisting" behavior? Is it an intended behavior or is a side effect in the let semantics?

Thank you.

# Andrea Giammarchi (11 years ago)

That is an intended behavior, you can see that let loop in this way, metaphorically speaking:

function test() {
  for (var i=0; i<10; i++) {
    (function(i){
      setTimeout(() => console.log(i));
    }.call(this, i));
  }
}

except after the loop no variable i with last loop value will be accessible in that scope.

# Salvador de la Puente González (11 years ago)

Does it only work for for loops, or it is the same for any block?

# Rick Waldron (11 years ago)

On Mon, Aug 25, 2014 at 6:16 AM, Salvador de la Puente González < salva at unoyunodiez.com> wrote:

Does it only work for for loops,

No

or it is the same for any block?

Yes, let and const are block-scoped.