Javascript eslint规则强制在块的顶部声明变量?
是否有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
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()代码>