为什么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”被设置为true或false ,基于“真实性”)。