AndreKR
AndreKR

Reputation: 33678

Does strict mode prohibit statement level function declarations?

"use strict";

if (true) {
  function foo() {
  }
}

In PhpStorm this code shows an error:

Function statement not at top level of a program or function is prohibited

However, Chrome happily executes it, even in the debugger and without any console output.

Now is it prohibited or not?

Upvotes: 10

Views: 5021

Answers (1)

Bergi
Bergi

Reputation: 664589

Yes, in ES5 they are prohibited (and in strict mode, all implementations throw). See also Kangax' great article for function statements in sloppy mode.

However, in ES6 they are block-level function declarations with new semantics. See also What are the precise semantics of block-level functions in ES6?. This seems to be what Chrome implements here; foo is not available outside of the if block.

Upvotes: 10

Related Questions