The confusion is that Firefox has long had a version of `let`, but their semantics don't line up with what the ES6 spec has declared for the new conforming behavior. The MDN page you link to lists Firefox's proprietary pre-ES6 version of `let`, and it will change once Firefox conforms to the ES6 spec.

Here's the Firefox bug which is tracking Firefox needing to change it's `for (let i=0...) { ... }` semantics to match the spec, which is a fresh binding for `i` per iteration: https://bugzilla.mozilla.org/show_bug.cgi?id=854037

What we need to separate here is Mozilla-proprietary `let (..) { .. }` statement blocks, which should be handled only as Mozilla handles them, and `let` declarations, which are covered by ES6 semantics, and should be treated according to the specification, NOT according to a non-conforming (legacy) browser implementation (like Firefox's).

`let` inside a for-loop header is quite specifically defined by ES6 to be per-iteration, as I demonstrated psuedo-code'ish above. We should not take current Firefox behavior (or even their MDN) documentation on this as more precedent than where the ES6 spec has already decided this feature is heading.