\"use strict\";
if (true) {
function foo() {
}
}
In PhpStorm this code shows an error:
Function statement not at top le
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.