Closed Bug 1233089 Opened 4 years ago Closed 4 years ago

Block scoping with let in for of loops

Categories

(Core :: JavaScript Engine, defect)

defect
Not set

Tracking

()

RESOLVED DUPLICATE of bug 449811

People

(Reporter: PatrickWesterhoff, Unassigned)

Details

The `let` statement is supposed to create a block scope variable, so that we can write the following code:

    let fs = [];
    for (let i = 0; i < 3; i++) {
        fs.push(() => i);
    }
    console.log(fs.map(f => f())); // 0, 1, 2

This works correctly with Firefox. However, when combining the `let` statement with the `for…of` loop, it does no longer work. Instead we get the same result as if we used `var` instead:

    fs = [];
    let nums = [0, 1, 2];
    for (let i of nums) {
        fs.push(() => i);
    }
    console.log(fs.map(f => f())); // 2, 2, 2

In V8, this seems to work fine (via Node 4.x), and it also works in Babel. What is causing this incorrect behavior of let in for…of loops in Firefox?
Status: UNCONFIRMED → RESOLVED
Closed: 4 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: 449811
You need to log in before you can comment on or make changes to this bug.