我对规则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 仅警告我第一种情况,但将声明式函数样式视为有效吗?
答案 0 :(得分:2)
引用rule documentation page(强调我的意思):
在JavaScript中,在ES6之前,变量和函数声明是 吊在示波器的顶部,因此可以使用标识符 在代码中正式声明之前。 这可能会造成混淆, 有些人认为最好总是声明变量和函数 在使用它们之前。
似乎没有一种方法只有在未吊起时才发出警告。您可以创建一个custom plugin。