我对规则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') }
但是,在声明函数时,完全可以在定义函数之前调用它(由于JS提升机制)
// Case 2:
// Correct code; for what reason does eslint warns me about this?
runMe() // Works!
function runMe() { alert('definition, hoisted') }
eslint为什么有相同的理由处理这两种情况(即,是否使脚本运行更快/禁用提升/具有其他影响)?
第二个问题:我可以将eslint配置为仅对第一种情况发出警告,但将声明式函数样式视为有效吗?
最佳答案
引用rule documentation page(重点是我):
在JavaScript中,在ES6之前,变量和函数声明是
吊在示波器的顶部,因此可以使用标识符
在代码中正式声明之前。这可能会造成混淆,
有些人认为最好总是声明变量和函数
在使用它们之前。
似乎没有一种方法只有在未吊起时才发出警告。您可以创建一个custom plugin。