Javascript ESLint规则,通过创建同名常量(特别是在赋值期间)来防止重写函数

Javascript ESLint规则,通过创建同名常量(特别是在赋值期间)来防止重写函数,javascript,ecmascript-6,eslint,Javascript,Ecmascript 6,Eslint,是否存在可以捕获以下内容的ESLint规则 const foo = () => 1 const bar = () => { const foo = foo() // 1. identifier 'foo' is set to undefined in this context 2. invoking foo() results in an error since `foo` is undefined return foo } > bar() > Uncaugh

是否存在可以捕获以下内容的ESLint规则

const foo = () => 1

const bar = () => {
  const foo = foo() // 1. identifier 'foo' is set to undefined in this context 2. invoking foo() results in an error since `foo` is undefined
  return foo
}

> bar()
> Uncaught ReferenceError: foo is not defined
    at bar (<anonymous>:4:15)
    at <anonymous>:1:1
constfoo=()=>1
常数条=()=>{
const foo=foo()//1。标识符“foo”在此上下文2中设置为未定义。调用foo()会导致错误,因为“foo”未定义
返回foo
}
>bar()
>未捕获引用错误:未定义foo
以巴计(:4:15)
时间:1:1

换句话说,当一个常量被赋予它自己的值时,我希望得到一个linter错误。

我所知道的最接近您用例的规则是ESLint的
在定义之前不使用。它会将此视为在
const foo
之前使用
foo
,并且会出错

唯一的缺点是,该规则不能进行完整的代码流分析,因此在类似这样的情况下也会出错

var getFoo = () => foo;

const foo = 4;

getFoo();

因为它仍然看到
foo
之前使用的
const foo
,即使在运行时它只在之后使用。如果您的代码库不这样做或者可以修复,这可能不是问题,但是如果您将规则添加到现有的大型代码库中,这可能会很烦人。

我认为您不应该将此限制为
const
声明,所有
x=x()
赋值是可疑的TDZ被命名为临时的,因为你不能总是知道变量是否会被初始化(当然有一些情况可能是早期错误)。您想检测那些覆盖函数的函数调用吗?很好。我想我不想太严厉,因为
x=x()
不一定会导致异常。所以我只想检测会导致异常的东西。我原以为TDZ只发生在
const
s上,但根据2ality,它也会影响
let
。ESLint的
在define之前没有任何用途
会捕捉到这一点,尽管它可能有点咄咄逼人,因为它会在声明之前引用任何东西,即使是在声明后的回调中。谢谢你,@loganfsmyth<代码>“定义前无需”:[“error”,{“variables”:false}]
提供了我想要的东西:-)谢谢您的回答!