出于什么目的,“未定义前请使用”会警告已声明的函数?

时间:2019-06-07 18:26:07

标签: javascript eslint

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

此规则非常合理,可以避免由函数表达式引起的错误,例如

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

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

const runMe = () => { alert('expression, not hoisted') }

但是,在声明函数时,完全可以在定义函数之前调用它(由于JS提升机制)

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

runMe() // Works!

function runMe() { alert('definition, hoisted') }

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

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

1 个答案:

答案 0 :(得分:2)

引用rule documentation page(强调我的意思):

  

在JavaScript中,在ES6之前,变量和函数声明是   吊在示波器的顶部,因此可以使用标识符   在代码中正式声明之前。 这可能会造成混淆,   有些人认为最好总是声明变量和函数   在使用它们之前。

似乎没有一种方法只有在未吊起时才发出警告。您可以创建一个custom plugin

相关问题