Maybe, I'm missing something subtle, but 21 is clearly the right answer and is what I believe is specified by the version of section 10 that I sent out yesterday regardless of the scoping of block nested functions. Of course, that's just spec-ware...
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Brendan Eich Sent: Thursday, July 10, 2008 1:45 PM To: Mark S. Miller Cc: [EMAIL PROTECTED]; [email protected]; Herman Venter Subject: Re: Update on ES3.1 block scoped function declarations On Jul 10, 2008, at 1:28 PM, Mark S. Miller wrote: On Thu, Jul 10, 2008 at 11:05 AM, Brendan Eich <[EMAIL PROTECTED]<mailto:[EMAIL PROTECTED]>> wrote: So what would this program print in ES3.1? const C = 42; function f(x, y) { const C = 33; if (x) { const C = 21; return eval(y); } return C; } print(f(true, "C")); 21 What does it print in ES4-opt-in? Call it ES4, please. There's no point in playing games about opt-in, since we know we can't "break the web". ES3 added new syntax, so did ES2. No one bugged out about "opt-in". 21 is the right answer, although reflecting lexical blocks into something eval can see is a big pain (we did this in Firefox 2). It's a lot of work just for block-scoped const. Sorry if I missed the discussion, but was restricting const to top level considered? /be
_______________________________________________ Es4-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es4-discuss
