4 ms·
Actually that code example should throw an exception when the first `a` is evaluated.
by AgentME 11y ago
Actually that code example should throw an exception when the first `a` is evaluated.
- nullz 11y agoIt doesn't in v8 -- what do you mean by `should`?
- egeozcan 11y agoIt's an implementation error. In Firefox, it correctly throws: > ReferenceError: can't access lexical declaration `a' before initialization
- titzer 11y agoNo, legacy const is not spec'd by ES5. It behaves differently in FireFox and V8 because it was added at different times with different semantics in the live range hole case. In strict mode, it will throw on V8 as well.
- Skinney 11y agoNo it shouldn't. `a` at the first console.log invocation IS undefined, so it is entirely correct.
- anamexis 11y agoNot according to the spec[1]: > The variables are created when their containing Lexical Environment is instantiated but may not be accessed in any way until the variable’s LexicalBinding is evaluated. I.e. given a variable declared with `const`, you may not access it before it is set. [1] http://people.mozilla.org/~jorendorff/es6-draft.html#sec-let-and-const-declarations http://people.mozilla.org/~jorendorff/es6-draft.html#sec-let...