Почему Jshint говорит "переменная, уже определенная" в этой инструкции if?
У меня есть этот код:
if ( something is true ) {
var someVar = true;
} else {
var someVar = false;
}
JsHint говорит, что "someVar уже определен" в части инструкции else. Почему это и как его исправить?
Спасибо
Ответ 1
JS-переменные не имеют области блока, у них есть область "функции" (или иногда глобальная).
Объявление (но не назначение) "поднимается" вверху функции.
jshint предупреждает вас, что у вас есть два таких объявления - ваш код эквивалентен:
var someVar;
var someVar; // warning!
if (something) {
someVar = true;
} else {
someVar = false;
}
Ответ 2
Это связано с подъемом.
В javascript, независимо от того, где вы определяете новую переменную с помощью var, она перемещает ее в начало функции, в которой вы находитесь. В вашем коде создается следующий выше блок if в верхней части функции: