Javascript eslint规则强制在块的顶部声明变量?

Javascript eslint规则强制在块的顶部声明变量?,javascript,ecmascript-6,eslint,ecmascript-2016,Javascript,Ecmascript 6,Eslint,Ecmascript 2016,是否有eslint规则强制在块的顶部声明变量?var-on-top规则似乎只适用于var关键字,而不是我想要的(例如,它将不允许用于(var I=0;…)。下面是一个人为的示例 错误代码 doWork() { const work = this.getWork(); if (work.isReady) { ... } let workResult = work.getResult(); // ... return workResult; } do

是否有eslint规则强制在块的顶部声明变量?
var-on-top
规则似乎只适用于
var
关键字,而不是我想要的(例如,它将不允许
用于(var I=0;…)
。下面是一个人为的示例

错误代码

doWork() {
    const work = this.getWork();

    if (work.isReady) { ... }

    let workResult = work.getResult();

    // ...

    return workResult;
}
doWork() {
    const work = this.getWork();
    let workResult;

    if (work.isReady) { ... }

    workResult = work.getResult();

    // ...

    return workResult;
}
好代码

doWork() {
    const work = this.getWork();

    if (work.isReady) { ... }

    let workResult = work.getResult();

    // ...

    return workResult;
}
doWork() {
    const work = this.getWork();
    let workResult;

    if (work.isReady) { ... }

    workResult = work.getResult();

    // ...

    return workResult;
}

我不知道有什么规则

var
规则有一个非常重要的目的:防止由于
var
s不明显的提升行为而意外引入错误。该规则强迫您自己提升它们,使行为变得明显(如果仍然有人讨厌)


使用
let
const
,因此强制执行该行为的主要实际原因不再存在。在定义变量之前使用变量仍然可能是一个问题,但有一个解决方法(包括
let
const
)。

我不知道这方面的规则

var
规则有一个非常重要的目的:防止由于
var
s不明显的提升行为而意外引入错误。该规则强迫您自己提升它们,使行为变得明显(如果仍然有人讨厌)


使用
let
const
,因此强制执行该行为的主要实际原因不再存在。在定义变量之前使用变量仍然可能是一个问题,但有一个解决方案(包括
let
const
)。

+1.事实上,手动“提升”可能是不可能的超出控制流的
const
声明-必须在初始化位置声明它。感谢您的响应。是的,我理解
vars-on-top
规则的原因,以及
如何让
/
const
解决提升问题。这更像是一个代码样式问题。@JoshM.Var-on-on-top是一个可怕的代码样式这就导致了大量的重复。在你需要变量的情况下声明变量:- @贝尔吉,我知道它是主观的,但是如果你在函数的中间声明变量,你的函数可能太长,应该被拆分。+ 1。事实上,手动将
const
声明“提升”出控制流可能是不可能的-它必须在初始化位置声明。感谢您的响应。是的,我理解
vars-on-top
规则的原因,以及
如何让
/
const
解决吊装问题。这更像是一个代码风格的问题。@JoshM。上面的Var是一种可怕的代码样式,它会导致大量重复。声明你需要的变量:-@ @贝尔吉,我知道它是主观的,但是如果你在函数中间声明变量,你的函数可能太长,应该被拆分。为什么你称它为好代码?
不应该让workResult
this.getWork()
之前声明吗?
在我的示例中没有声明this.getWork()
,它只被调用。是的,我的意思是应该在调用其他任何东西之前声明它<代码>var工作,工作结果;work=this.getWork()为什么称之为好代码?
不应该让workResult
this.getWork()
之前声明吗?
在我的示例中没有声明this.getWork()
,它只被调用。是的,我的意思是应该在调用其他任何东西之前声明它<代码>var工作,工作结果;work=this.getWork()