Antonoff
@Antonoff
Разработчик

Какой будет результат выполнения данного кода?

Наткнулся на этот вопрос, просто когда прилистывал разные тестовые задания на позиции фронтдева.

Исходя из вопроса: "Ответьте, пожалуйста, на вопрос: какой будет результат выполнения данного кода и почему?"

var a = 12; 
function b() { 
if (!a) { 
var a = 9; 
} 
alert( a ); 
} 
b();


Ответ получился 9; но кто может растолковать, почему? Вроде же есть if(!a) и по логике, должен быть ответ 12?
  • Вопрос задан
  • 574 просмотра
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что переменные в js создаются не там, где вы их объявили, а в начале области видимости (функции).
Таким образом, a в момент проверки создана, но не заполнена, ее значение - undefined.
Поэтому проверка срабатывает и значение a переопределяется.
JS 101.
http://learn.javascript.ru/global-object#порядок-и...
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
Чтобы было более наглядно:
var a = 12; 
function b() { 
    var a; // новая переменная a внутри функции

    if (!a) { // выполнится всегда, так как a == undefined
        a = 9; 
    } 

    alert( a ); 
} 
b();

Вот так оно на самом деле работает, не важно где в теле функции вы объявили var a; и где присвоили ему значение, все равно он будет там.
Ну а чтобы добиться правильного результата, вам не нужно второй раз объявлять переменную.

var a = 12; 
function b() { 
    if (!a) { 
        a = 9; 
    } 

    alert( a ); 
} 
b();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mlnkv
@mlnkv
JavaScript Developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы