0

What is the difference in doing the following three constructions in JavaScript:

let dd = [ 1, 2, 3, 4, 5 ];

for(const item of dd) console.log(item);
for(let   item of dd) console.log(item);
for(      item of dd) console.log(item);

It seems they all produce the exact same results so wondering if there are some subtle differences between them, especially when neither let nor const is there, specifically in the context for a forof loop.

Sebastian Simon
  • 18,263
  • 7
  • 55
  • 75
samuelbrody1249
  • 4,379
  • 1
  • 15
  • 58

1 Answers1

4

Here are some examples that demonstrate the difference:

let dd = [1, 2, 3, 4, 5]

// identically-named variable in the outer scope
let item = -1

for (const item of dd) {
    console.log(item) // ok
    // console.log(++item) // can't re-assign - will throw if uncommented
}

console.log(item) // still -1, as `const` is block-scoped

for (let item of dd) {
    console.log(item) // ok
    console.log(++item) // it's fine to re-assign 
}

console.log(item) // still -1, as `let` is block-scoped

for (item of dd) {}

console.log(item) // 5, as we've now re-assigned the variable in the outer scope
// due to not using `const` or `let`
Lionel Rowe
  • 5,164
  • 1
  • 14
  • 27