What are the Block-level functions actually? πŸ™‹β€β™‚οΈ

The β€œweb extensions” do only utilise to sloppy (non-strict/normal) code, and only if the presence of the function statement is β€œsane” that is, for example, if its name doesn’t conflict with a regular parameter or lexically listed variable.

Remark that there is no differentiation between strict and sloppy code outwardly the web-compatibility semantics. In pure ES6, there is just one style for function declarations in blocks.

Hence we fundamentally have this -

web-compat               pure
strict mode ES6 | block hoisting block hoisting
sloppy mode ES6 | it's complicated ΒΉ block hoisting
strict mode ES5 | undefined behaviour Β² SyntaxError
sloppy mode ES5 | undefined behaviour Β³ SyntaxError