我对规则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

10-04 22:43
查看更多