Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 409
user2413333 Avatar asked Oct 16 '13 20:10

user2413333


2 Answers

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; } 
like image 190
Alnitak Avatar answered Oct 25 '22 18:10

Alnitak


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/

like image 39
Erik Christianson Avatar answered Oct 25 '22 19:10

Erik Christianson