Объявление переменной внутри оператора if - PullRequest
0 голосов
/ 26 июня 2018

Мой вопрос потенциально смущает. Я бы посоветовался с Google, если бы знал, какой вопрос задавать конкретно, но, увы, я новичок в коде и поэтому не знаком с жаргоном ...

Я следую письменному руководству @ https://javascript.info. Я на уроке об условных операторах и операторах if, но мне трудно разобраться в поведении одной из задач (http://javascript.info/ifelse#tasks), в частности, задание № 4. «Проверка логина».

Вот код:

let userLogin = prompt("Who's there?", "");

if (userLogin == 'Admin') {

  let pass = prompt("Password?", ""); // *******    

  if (pass == 'TheMaster') {
    alert('Welcome!');
  } else if (!pass) {
    alert("Canceled.");
  } else {
    alert('I do not know you');
  }

} else if (!userLogin) {
  alert("Canceled");
} else {
  alert("I don't know you")
}

Мой вопрос вращается вокруг (****) строки. Код не работает должным образом, если эта строка не вложена в 'if', что отбросило меня (с самого начала это было как «глобальная» переменная, пришлось проверить решение, потому что я не смог найти ошибку) ,

Прошу вас, пожалуйста, уточнить, почему это так. (

редактировать Я не понимал, что я был неопределенным. Я совершенно новичок в форуме, больше не повторится.

Код не работает, а это означает, что запись «Admin» в первом приглашении не требуется для перехода к приглашению «pass». Такое поведение происходит только тогда, когда я не вкладываю объявление «pass» внутри «if». Я думаю Я нашел свой ответ, но хотел отредактировать так, чтобы больше не волновать сообщество. : P

let userLogin = prompt("Who's there?", "");
let pass = prompt("Password?", ""); // ******* 

if (userLogin == 'Admin') {


  if (pass == 'TheMaster') {
    alert('Welcome!');
  } else if (!pass) {
    alert("Canceled.");
  } else {
    alert('I do not know you');
  }

} else if (!userLogin) {
  alert("Canceled");
} else {
  alert("I don't know you")
}

Это то, что я имею в виду - надеюсь, это прояснит! Снова извините.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Единственное различие, которое я обнаружил, состоит в том, что если вы удалите строку (*) из блока if, сценарий запросит у пользователя ** userLogin и pass , и затем сделайте проверку. Если вы этого не сделаете, сценарий запросит userLogin , а если это не так, вы не будете тратить время на запрос pass . Как говорят другие, было бы лучше объяснить, какая именно у вас проблема.

0 голосов
/ 26 июня 2018

я предполагаю, что у вас был проход либо в отдельной вложенной области видимости, либо объявленный после его использования. let декларации не hoisted как var декларации. Таким образом, они должны быть доступны из одной и той же области или из более вложенной области этой области, ПОСЛЕ их объявления.

let userLogin = prompt("Who's there?", "");
let pass = prompt("Password?", ""); // *******    
if (userLogin == 'Admin') {

    

    if (pass == 'TheMaster') {
        alert('Welcome!');
    } else if (!pass) {
        alert("Canceled.");
    } else {
        alert('I do not know you');
    }

} else if (!userLogin) {
    alert("Canceled");
} else {
    alert("I don't know you")
}

ссылка на определение подъема, если вам интересно: https://developer.mozilla.org/en-US/docs/Glossary/Hoisting

PS - Я надеюсь, что это просто игрушечная проблема ... но если это не , пожалуйста не используйте это для выполнения реальной аутентификации. Все, что находится в Javascript страницы, видимо всем, и ваше имя пользователя и пароль будут НЕ безопасными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...