@qbr-code

Почему возникает ошибка при объявлении переменной с ключевым словом после return?

Добрый день.
В целях учебной практики у меня было задание написать функцию в одну строку, функцию я написал (ниже). Суть функции роли не играет, вопрос у меня по синтаксису:
после слова return я пишу sum = // присвоение значения. При этом sum я нигде не объявлял, но мне нужно во что-то присвоить результат выражения, чтобы потом решить: вызвать функцию еще раз рекурсивно с результатом sum или вернуть sum.
Вопрос: если я пишу "let sum =", возникает ошибка "Ожидалось ")". Если пишу просто "sum =", то все ок. Почему с ключевым словом - ошибка, без него - ок?
const addNums = (num) => {
    return ((sum = num.toString().split('').map(x => Number(x)).reduce((a, b) => a + b)).toString().length > 1) ? addNums(sum) : sum;
}
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
locky_yotun
@locky_yotun Куратор тега JavaScript
Я видел некоторый джаваскрипт
Потому что это невалидно с точки зрения JS, то что вы делаете — это то же самое что и (let a = 42).toString() Это просто невалидно. А то, что оно у вас работает без объявления с ключевым словом — это просто потому, что JS один из самых не строгих языков, и прощает очень много ошибок — пытается выполнить код хоть как-то.
Вы написали что назначение функции не имеет значения, но это не так — потому что в результате вы не получили "однострочник" — получилась обычная невалидная функция, записанная в одну строку. Это не то же самое, что "однострочник". Поясните лучше изначальную задачу.

UPD: итоговое решение:
const addDigits = num => num < 10 ? num : addDigits(('' + num).split('').reduce((acc, el) => (acc += +el), 0));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Александрия Москва
от 200 000 до 250 000 руб.
Foodtronics Москва
от 100 000 до 200 000 руб.
Zeus Capital Москва
от 70 000 до 130 000 руб.
22 авг. 2019, в 02:23
45000 руб./за проект
22 авг. 2019, в 02:15
5000 руб./за проект
22 авг. 2019, в 01:00
300 руб./за проект