1

Кто-то может подсказать почему в данном сегменте кода интерпретатор выдает следующую ошибку — Uncaught TypeError: Cannot read property 'length' of undefined?

function getGuess() {
    prompt("Type in some character");
}

var guess = getGuess();
if (guess === null) {
    break;
} else if (guess.length !== 1) {
    alert("Please enter a single letter.");
}
Grundy
  • 81,538
Alex
  • 173
  • скрыть ошибку отсутствия return можно было бы нестрогой проверкой guess == null вместо guess === null, но тогда всегда был бы заход в условие и вызов break; – Grundy Jan 08 '17 at 15:51
  • Вам не понятно почему нельзя прочитать длину неустановленной переменной, или почему не срабатывает условие if, или почему переменной ничего не присваивается? – Crantisz Jan 08 '17 at 15:54
  • Но ведь prompt по идее должен и так возвращать значение. Зачем тут return? – Alex Jan 08 '17 at 16:00
  • Переменная установлена. Мне не понятно, почему не удается прочитать длину установленной переменной. – Alex Jan 08 '17 at 16:03
  • @AlexStelmakh, потому что prompt вернул значение в пустоту. А функция getGuess - ничего не возвращает, поэтому getGuess() всегда будет undefined. Так как в функции нет ни одного return – Grundy Jan 08 '17 at 16:14
  • function getGuess() { return prompt("Type in some character"); } –  Jan 08 '17 at 16:14
  • Но ведь prompt по идее должен и так возвращать значение. Зачем тут return? Добавил return. Ошибки нет. Но все же, я думал, что return возвращает значение по умолчанию. Или это не так? – Alex Jan 08 '17 at 16:15
  • @AlexStelmakh, prompt это обычная функция, которая возвращает значение. ты ее вызвал. получил значение и вернул его из функции. Далее в месте вызова ты никуда не сохранил возвращенное значение, и вышел из функции getGuess ничего не вернув – Grundy Jan 08 '17 at 16:17
  • я думал, что return возвращает значение по умолчанию - не понял этого предположения – Grundy Jan 08 '17 at 16:17
  • Пройди по ссылке на вопрос-дубликат, там та же самая проблема – Grundy Jan 08 '17 at 16:19
  • Как никуда не сохранил? — – Alex Jan 08 '17 at 16:19
  • var guess = getGuess(); – Alex Jan 08 '17 at 16:20
  • примите как данность - если в функции нет return, то возвращенное значение - undefined. Такой язык. В других - может быть иначе. –  Jan 08 '17 at 16:21
  • @AlexStelmakh, var guess = getGuess(); здесь сохраняется результат функции getGuess. А теперь покажи где ты сохраняешь результат функции prompt? – Grundy Jan 08 '17 at 16:30
  • @Grundy как мне казалось результат вызова prompt принадлежит функции getGuess(). Но теперь я совсем запутался. Получается без return prompt возвращается в никуда? – Alex Jan 08 '17 at 16:35
  • @AlexStelmakh, именно об этом и были предыдущие комментарии. результат вызова prompt принадлежит функции getGuess - что значит принадлежит? – Grundy Jan 08 '17 at 16:40
  • Прошу прощения за возможно глупые вопросы, но как учиться по другому? У кого еще спрашивать как не здесь? Я иногда готов на стену лезть, когда вроде все понятно, пишешь и нихрена не работает. Это так мысли вслух. – Alex Jan 08 '17 at 16:41
  • Если без лишних слов, получается return must have? – Alex Jan 08 '17 at 16:42
  • если функция должна вернуть значение у нее должен быть return. Исключение составляют стрелочные функции но это отдельная история – Grundy Jan 08 '17 at 17:02

0 Answers0