In ES6 strict mode: do function declarations within a block hoist?

# John Lenz (11 years ago)

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?)

# Andreas Rossberg (11 years ago)

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.

# John Lenz (11 years ago)

Thanks.