@narem

Почему не срабатывает условие if?

Почему не срабатывает if? Код все равно выдает else
let a = 1;
$("#button-one").click(function(){
	$("#text-two").css("background",function(a){
		if(a == 1){
			return "red";
		}else{
			return "gray";
		}
	});
});
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
TaPO4eg3D
@TaPO4eg3D
Rust, Python
Самой первой строчкой вы объявляете переменную "а". Как я понимаю, ее вы и хотите использовать в вашем условии. Если это так, то рассмотрим следующий код:

$("#text-two").css("background",function(a){
    if(a == 1){
      return "red";
    }else{
      return "gray";
    }
  });


Блок IF находится в контексте callback функции, что вы передаете в качестве аргумента для функции css. Рассмотрим поближе эту callback функцию:

function(a){
    if(a == 1){
      return "red";
    }else{
      return "gray";
    }
  }


В javascript есть такое понятие как область видимости переменных. Когда вы создаете функцию, то вместе с ней создается объект LexicalEnvironment, в вашем случае он будет выглядеть так {a: undefined}. Когда вы обращаетесь к переменной внутри функции, первым делом вы обращаетесь к этому объекту. Т.е., ваше обращение к переменной "a" будет выглядеть как LexicalEnvironment.a, в вашем случае это будет не единица, а undefined. Именно поэтому условие не выполняется. Для того, чтобы обратиться к внешней переменной, вам необходимо убрать переменную "a" из аргументов вашей callback функции.

$("#text-two").css("background",function(){
    if(a == 1){
      return "red";
    }else{
      return "gray";
    }
  });


Теперь, когда функция не найдет переменную в LexicalEnvironment, она будет обращаться ко внешнему объекту переменных, именно там и находится переменная "а" со значением "1"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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