#javascript #conditional-statements
#javascript #условные операторы
Вопрос:
У меня есть эта часть кода:
let values = true;
let msg = 'message1';
if(values) {let msg = 'message2';}
console.log(msg);
И у меня всегда есть message1 в журнале консоли.
Как я знаю, if(values)
должно удовлетворять оператору if для любого истинного значения значений, включая true, любое ненулевое число, любое непустое строковое значение, любую ссылку на объект или массив и т. Д…
Так почему же это не работает?
Комментарии:
1. Почему у вас есть
let msg
внутриif
? удалитеlet
, и это сработает2. черт, я удалил его, и он работает! Хм, я подумал, что LET if для определения переменных, не знал, что достаточно определить его один раз. Спасибо!
3.
let
имеет локальную область действия оператора внутреннего блока.
Ответ №1:
Область видимости переменной, объявленной с помощью let
, — это самый внутренний блок кода, который ее содержит.
В вашем примере есть две разные переменные с именами msg
.
Первый ( let msg = 'message1') is the one printed by
console.log(msg);`.
Второй (пусть msg = ‘message2’) существует только в блоке ( {...}
), где он объявлен. Оно уничтожается, когда выполнение кода покидает блок (at }
).
Внутри этого блока внешняя переменная named msg
недоступна.
Нет необходимости объявлять переменную несколько раз (если только ваша цель не состоит в том, чтобы получить эффект, с которым вы столкнулись сейчас). Объявляйте его только один раз, прежде чем оно будет использовано в первый раз.
Этот код работает так, как ожидалось:
let values = true;
let msg = 'message1';
if (values) {
msg = 'message2';
}
console.log(msg);
Вы можете добавить console.log()
вызовы внутри if
блока, чтобы проверить, что он выполняется (потому что условие true
):
let values = true;
let msg = 'message1';
if (values) {
let msg = 'message2';
console.log('inner: ' msg);
}
console.log('outer: ' msg);
Ответ №2:
Проблем с if
оператором нет. Он работает правильно, но проблема в том, что вы снова определили msg
переменную с let msg = 'message2';
Это должно быть заменено на msg = 'message2'
, и оно будет работать.
let values = true;
let msg = 'message1';
if(values) {
msg = 'message2';
}
console.log(msg);