为什么Jshint在这个if语句中说“variable already defined”?

我有这个代码:

if ( something is true ) { var someVar = true; } else { var someVar = false; } 

JsHint在else语句部分说“someVar已经被定义了”。 为什么是这个,如何解决?

谢谢

JSvariables没有块范围,他们有“function”范围(或有时全球)。

声明(但不是赋值)被“悬挂”到函数的顶部。

jshint警告你,你有两个这样的声明 – 你的代码相当于:

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

这是由于吊装。

在JavaScript中,无论你在哪里定义一个新的variables,它将它移动到你所在的函数的顶部。你的代码在函数顶部的if块上面产生以下代码:

 var someVar; var someVar; 

这里是解释提升的教程:

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

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

事实上,在这里你根本不需要if语句:

 var someVar = !!(something); 

将做同样的事情。 (双重应用!确保“someVar”被设置为truefalse ,基于“真实性”)。