为什么不能在括号中访问函数声明?

时间:2021-05-16 12:37:25

标签: javascript function scope

无法再通过名称访问函数声明:

(function log(){
  console.log('print some information')
})
log()

代码抛出引用错误。我对此的理解是:函数 log 不存在于任何内部作用域中,为什么我不能按其名称调用它?

1 个答案:

答案 0 :(得分:3)

<块引用>

为什么我不能直呼它的名字?

当你在 function 周围加上括号时,你会得到一个 function expression,而不是一个 function declaration,因为解析器希望在 {{1} 之间看到一个 expression }} 而不是声明。函数表达式名称只能在该函数的本地访问:

<块引用>

如果要在函数体内引用当前函数, 您需要创建一个命名函数表达式。 这个名字就是 仅局部于函数体(范围)

-MDN

这同样适用于其他运算符,例如 ()!,而不仅仅是 +,这使您的函数被视为函数表达式。

如果你想创建一个函数声明,你可以去掉括号:

()

相关问题