This example is taken from [mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Another_example_of_temporal_dead_zone_combined_with_lexical_scoping) and it throws error because 

> 
> The instruction let n of n.a is already inside the private scope of
>  the for loop's block, hence the identifier "n.a" is resolved to the
>  property 'a' of the 'n' object located in the first part of the
>  instruction itself **("let n"), which is still in the temporal dead zone**
>  since its declaration statement has not been reached and terminated.
> 
> 
> 

```js
function go(n) {
  for (let n of n.a) {
    console.log(n);
  }
}

go({
  a: [1, 2, 3]
});
```

Now I changed the variable name from `n` to `k` and it works. But according to `mdn` `let k` will be still in temporal dead zone. **Then how come this does not throws the error but logs the value?** 

```js
function go(n) {
  for (let k of n.a) {
    console.log(k);
  }
}

go({
  a: [1, 2, 3]
});
```