excluding features from sloppy mode

Domenic Denicola domenic at domenicdenicola.com
Wed Jan 16 11:54:39 PST 2013

Coincidentally, I compiled a list of interesting cases a few days ago, for both const and let. They were meant to be used in kangax's ES6 compatibility table:


In short:

const x; // SyntaxError
let x; let x; // SyntaxError
const x = 5; const x = 5; // SyntaxError
x; const x = 5; // ReferenceError
x; let x; // ReferenceError
const x = 2; { x; const x = 5; } // ReferenceError
let x; { x; let x; } // ReferenceError

plus a test of fresh per-loop iteration for let

Corrections welcome, and kudos to Brandon Benvie on pointing me to the fact that those last four should be ReferenceErrors.

From: es-discuss-bounces at mozilla.org [es-discuss-bounces at mozilla.org] on behalf of Oliver Hunt [oliver at apple.com]
Sent: Wednesday, January 16, 2013 14:40
To: Brendan Eich
Cc: Mark S. Miller; Mark Miller; es-discuss at mozilla.org
Subject: Re: excluding features from sloppy mode

Even 10?  If that's the case anything using const is inherently tied to jsc,v8,moz,opera behaviour.

Presumably the strictest of those _works_, but maybe i'm wrong?

We should probably just enumerate all the differences and see which can be coalesced and which make "sense" in sloppy mode.

Obvious cases i can think of:

const x;
var x;
const x;
x = 5;
const x;
var x;
x = 5;
const x =4;
var x = 5;
if (..)
   const x = ....
   const x = ....

That's it for now.  Maybe block scoping const will work in sloppy mode?  is for (const x = ...) valid?


On Jan 16, 2013, at 11:31 AM, Brendan Eich <brendan at mozilla.com> wrote:

> There's no const in IE, so we are pretty sure we can take the hit of breaking "Mozilla" (non-IE branches, also WebKit, maybe Opera) code that uses const.
> /be
> Brandon Benvie wrote:
>> The incompatibilities between let/const as implemented in V8 and Spidermonkey and how they're specified in ES6 are an additional factor:
>> * Per iteration loop binding (V8 and Spidermonkey don't do this for let/const).
>> * TDZ. `x; const x = 10` works in V8 and Spidermonkey currently, specified to throw ReferenceError in ES6
>> I think there's other differences.

es-discuss mailing list
es-discuss at mozilla.org

More information about the es-discuss mailing list