No, that was to underline it is possible to define this twice

static int const NAME =



On Fri, Dec 20, 2013 at 8:49 AM, J B <[email protected]> wrote:

> Your C comparison was apples-to-oranges, #ifdef is evaluated at compile
> time.
>
>
> On Fri, Dec 20, 2013 at 8:32 AM, Andreas Rossberg <[email protected]>wrote:
>
>> On 20 December 2013 04:05, Brendan Eich <[email protected]> wrote:
>> > Andrea Giammarchi wrote:
>> >>
>> >> why is this not possible, giving the ability to understand through
>> typeof
>> >> if there is a value or not?
>> >>
>> >> ```javascript
>> >> // defined as const
>> >> // reserved in this scope
>> >> // but not assigned yet
>> >> const WHATEVER;
>> >> if (condition) {
>> >>   // first come, first serves
>> >>   WHATEVER = 123;
>> >>   // that's it! const defined for the whole scope
>> >>   // immutable from now on
>> >> } else {
>> >>   WHATEVER = 456;
>> >> }
>> >
>> >
>> > Past JS2/ES4 designs have allowed this, but it requires definite
>> assignment
>> > analysis and use-before-defining-assignment error checking.
>> >
>> > In general, such checks can't be static in JS, so the language and VM
>> > complexity blow up a bit with runtime checking for an "uninitialized"
>> (not
>> > same as undefined) sentinel value that must be guarded against by a read
>> > barrier where it can't be proven unnecessary.
>> >
>> > This is pretty obnoxious for implementors, not great for users either
>> (did I
>> > declare const IMPORTANT; and forget to assign IMPORTANT= in some branch
>> of
>> > control flow that my tests miss?).
>> >
>> > It's not in Harmony. We require an initialiser as part of the const
>> > declaration syntax. What you are doing here, by many measures, is
>> varying a
>> > variable from its default (undefined) value to a new value.
>> >
>> > If you want that variable to stop varying after, and you need it as a
>> global
>> > (window) object property anyway, use Object.defineProperty to make it
>> > non-writable.
>> >
>> > BTW, the last version your head post gave,
>> >
>> > const ES6_PROXY = function(){
>> >
>> >   try {
>> >     new Proxy({},{});
>> >     return true;
>> >   } catch(o_O) {
>> >     return false;
>> >   }
>> > }();
>>
>> Of course, the problem here is hardly specific to feature detection,
>> or const, but simply an instance of the general annoyance induced by
>> the old-school statement/expression separation. What you'd really want
>> to write is something like
>>
>>   const ES6_PROXY = try new Proxy({}, {}), true catch (_) false;
>>
>> For ES7 I would like to revive the do-expression proposal (hopefully
>> at the next meeting), so that one can at least approximate the above
>> with
>>
>>   const ES6_PROXY = do { try { new Proxy({}, {}); true } catch (_) {
>> false } };
>>
>> Of course, semantically the function is equivalent, and a fine
>> solution, if a bit verbose.
>>
>> /Andreas
>> _______________________________________________
>> es-discuss mailing list
>> [email protected]
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to