为什么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
,基于“真实性”)。