f
is not in scope because it is an inline named function expression. It is not a function declration. The differences are subtle but important -
// declaration
function f () { ... }
// named function expression
const foo = function f () { ... }
// named arrow expression
const f = () => { ... }
// unnamed arrow expression
() => { ... }
The semantics of if
help us understand -
if (<expression>) {
<consequent>
} else {
<alternative>
}
As you can see, the conditional supplied to an if
statement must be an expression. You cannot declare a variable in an expression. This includes function declarations.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…