Why is Jshint saying “variable already defined” in this if statement?

我们两清 提交于 2019-12-02 21:01:55

JS variables do not have block scope, they have "function" scope (or sometimes global).

The declaration (but not the assignment) is "hoisted" to the top of the function.

jshint is warning you that you have two such declarations - your code is equivalent to:

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

This is due to hoisting.

In javascript, no matter where you define a new variable with var, it moves it to the top of the function you are in. Your code is producing the following above your if block at the top of the function:

var someVar;
var someVar;

Here is a tutorial to explain hoisting:

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

You shouldn't put var declarations in such places. Put the var declaration before the if, and then just set "someVar" to a value.

Indeed, here you don't need an if statement at all:

var someVar = !!(something);

will do the same thing. (The double application of ! ensures that "someVar" is set to either true or false, based on the "truthiness" of something.)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!