Javascript 为什么Jshint会说;变量已定义";在这个if语句中?

Javascript 为什么Jshint会说;变量已定义";在这个if语句中?,javascript,jshint,Javascript,Jshint,我有以下代码: if ( something is true ) { var someVar = true; } else { var someVar = false; } JsHint表示在else语句部分“someVar已经定义”。这是为什么?我该如何修复它 谢谢您不应该在这些地方放置var声明。将var声明放在if之前,然后将“someVar”设置为一个值 实际上,这里根本不需要if语句: var someVar = !!(somethin

我有以下代码:

 if ( something is true ) {
        var someVar = true;
    } else {
       var someVar = false;
    }
JsHint表示在else语句部分“someVar已经定义”。这是为什么?我该如何修复它


谢谢

您不应该在这些地方放置
var
声明。将
var
声明放在
if
之前,然后将“someVar”设置为一个值

实际上,这里根本不需要
if
语句:

var someVar = !!(something);

我也会做同样的事情。(双重应用
可确保根据
某物的“真实性”将“someVar”设置为

这是由于吊装造成的

在javascript中,无论在何处使用
var
定义新变量,它都会将其移动到所处函数的顶部。代码在函数顶部的if块上方生成以下内容:

var someVar;
var someVar;
以下是一个关于吊装的教程:


JS变量没有块作用域,它们有“函数”作用域(有时是全局的)

声明(而不是赋值)被“提升”到函数的顶部

jshint警告您有两个这样的声明-您的代码相当于:

var someVar;
var someVar;  // warning!
if (something) {
     someVar = true;
} else {
     someVar = false;
}

var-someVar=Boolean(某物)
做了同样的事情,并且可能更具可读性。@使用ES6的第四种方法,块作用域现在在JavaScript中使用
{}
let