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