Peter Michaux wrote:
> On Sun, Oct 12, 2008 at 12:11 PM, David-Sarah Hopwood
> <david.hopwood at industrial-designers.co.uk> wrote:
>> Peter Michaux wrote:
>>> David-Sarah wrote:
>>>>>>>> (function () {
>>>> print(x);
>>>> { const x = 42; }
>>>> })();
>>>>>>>> (calls 'print(undefined)').
>>>>>> The expected output should be "undefined", shouldn't it?
>>>> For some definition of "expected". That's what it does in FF3 (I don't
>> have Safari or Opera installed, and IE7 throws a SyntaxError), but I
>> don't think it is expected, or useful, that a const variable can
>> effectively be mutable. For 'var' there are potential uses of hoisting
>> (even if they would be more clearly expressed in other ways), but not
>> really for 'const'.
>> Either const should not hoist, the print above should show
> "undefined", or an error is thrown "using a const not yet assigned."
>> It would be completely unintelligible to read code where the print
> above shows "42".
Of course. In both my proposal and in the current draft of ES3.1, this
is a static error, because x isn't in scope at the 'print' -- except
that if there is an x declared in some surrounding scope, that x is used.
(Static errors might still be reported at run-time, depending on what
kind of environment the code is running in.)
--
David-Sarah Hopwood