Andreas Rossberg (2014-06-05T15:54:16.000Z)
On 5 June 2014 17:44, John Lenz <concavelenz at gmail.com> wrote:
> That is to say, is this valid:
>
> if (x) {
>   f();
>   function f() { doSomething() }
> }
>
> The same question applies to class declarations.  I assume that top level
> class declarations hoist. (Where is this in the spec?)

Yes, that is valid. Function bindings are initialised when entering a
scope, all other declarations when their respective statement is
executed -- before that any access will cause a ReferenceError (the
so-called temporal dead zone).

In particular, classes don't "hoist", because their extends clause has
to be evaluated at the right point in time.

/Andreas
domenic at domenicdenicola.com (2014-06-10T19:04:38.517Z)
Yes, that is valid. Function bindings are initialised when entering a
scope, all other declarations when their respective statement is
executed -- before that any access will cause a ReferenceError (the
so-called temporal dead zone).

In particular, classes don't "hoist", because their extends clause has
to be evaluated at the right point in time.