“no-use-before-define”对声明的函数发出警告的目的是什么?

Phi*_*ipp 6 javascript eslint

我对规则中的eslint警告感到困惑no-use-before-define

这个规则对于避免函数表达式引起的错误非常有意义,例如

// Case 1:
// Incorrect code; eslint warns me for good reason:

runMe() // Error: Cannot access 'runMe' before initialization

const runMe = () => { alert('expression, not hoisted') }
Run Code Online (Sandbox Code Playgroud)

然而,在声明函数时,在函数定义之前调用它是完全可以的(感谢 JS 提升机制)

// Case 2:
// Correct code; for what reason does eslint warns me about this?

runMe() // Works!

function runMe() { alert('definition, hoisted') }
Run Code Online (Sandbox Code Playgroud)

是否有原因,为什么eslint以相同的方式处理这两种情况(即它是否使脚本运行得更快/禁用提升/有一些其他影响)?

第二个问题:我可以将eslint配置为仅警告我第一种情况,但将声明性函数样式视为有效吗?

Tru*_*ill 4

引用规则文档页面(强调我的):

\n\n
\n

在 ES6 之前的 JavaScript 中,变量和函数声明被提升到作用域的顶部,因此可以在代码中的正式声明之前使用标识符。这可能会令人困惑,有些人认为最好在使用变量和函数之前先声明它们。

\n
\n\n

似乎没有办法仅在不悬挂的情况下发出警告。您可以创建一个自定义插件

\n