I have this code:
if ( something is true ) {
var someVar = true;
} else {
var someVar = false;
}
JsHint is saying that "someVar was already defined" on the else statement part. Why is this and how do I fix it?
Thanks
I have this code:
if ( something is true ) {
var someVar = true;
} else {
var someVar = false;
}
JsHint is saying that "someVar was already defined" on the else statement part. Why is this and how do I fix it?
Thanks
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: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 thevar
declaration before theif
, and then just set "someVar" to a value.Indeed, here you don't need an
if
statement at all:will do the same thing. (The double application of
!
ensures that "someVar" is set to eithertrue
orfalse
, based on the "truthiness" ofsomething
.)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: