Нужно ли мне использовать переменную var или переменную let в этом примере?

#javascript #while-loop #var #let

#javascript #цикл while #var #пусть

Вопрос:

Когда я использую var вместо let, следующий код работает нормально и предлагает пользователю вводить текст, пока он не введет слово «exit». Однако, используя let, когда я набираю второй раз слово «exit», этого не происходит.

 let text = prompt("write something");

while(text !== "exit")
{
    let text = prompt("write something");
}

console.log("end of program);
  

Комментарии:

1. Также вы забыли " внизу console.log(...)

2. Рекомендуемое чтение: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Безусловно, полезно понимать такие базовые концепции языка, который вы используете.

Ответ №1:

Ничего не используйте при сбросе текста

 let text = prompt("write something");

while(text !== "exit")
{
    text = prompt("write something"); // nothing, uses text in outer scope
}

console.log("end of program);
  

Когда вы используете ‘let’ в цикле while, вы создаете отдельную переменную
область действия ограничена этим блоком инструкций. Когда вы используете var, он передается функции или глобальному объекту, если не в функции (или если вы не используете var, let или const и просто пытаетесь использовать переменную без ее объявления). Поскольку переменные находятся в одной и той же функции (или глобальной области видимости), использующей var, они ссылаются на одно и то же.

При использовании let область действия переменной ограничивается блоком кода. Таким образом, переменная ‘text’ внутри блока оператора while не ссылается на ту же переменную ‘text’, объявленную вне этого блока и используемую в условии while. Вот пример из ссылки:

 let x = 1;

if (x === 1) {
  let x = 2;

  console.log(x);
  // expected output: 2
}

console.log(x);
// expected output: 1