JavaScript: создание функции, которая возвращает функцию, в которой возвращаемая функция вызывает переданную функцию

Я пытаюсь создать функцию «трижды», которая возвращает другую функцию.

У меня есть следующий код ниже:

const thrice = (inputFunc) => {
  return inputFunc()
}

let eight;

eight = thrice(() => {
  return 8;
});

const value = eight();
value

Я ожидаю, что значение будет равно: 8. Оно должно равняться 8 на основе моей тестовой спецификации.

Но когда я запускаю свой код, он возвращает: TypeError: eight is not a function

Что я делаю неправильно? Моя догадка заключается в том, что я должен сделать return inputFunc внутри функции thrice. Но я концептуально не понимаю, почему.

const thrice = f => x => f(f(f(x))) применит функцию f к x три раза... Думаю, вам нужно что-то ближе к этому. То есть const add1 = x => x + 1; const add3 = thrice(add1); add3(10); // =>13.
Mulan 12.07.2019 23:48

Ваша основная проблема заключается в том, что вы вызываете функцию в thrice, а не просто возвращаете ее. Измените на return inputFunc, и он будет работать как положено.

Mark 12.07.2019 23:53

@Mark: кажется, я понимаю; Я вызываю функцию внутри трижды, когда я должен просто вернуть полную функцию, которую позже можно будет вызвать

PineNuts0 12.07.2019 23:59

@PineNuts0 Как вариант, return x => inputFunc(x)

Bergi 13.07.2019 00:00

Объявлены только две функции (=>), но вы вызываете три (()). Какой из вызовов вы удаляете, не имеет значения, вы также можете добавить функцию, но это зависит от вашего варианта использования.

Jonas Wilms 13.07.2019 00:02
const thrice = fn => fn; приведет к тому, что value станет 8. Но тогда вы могли бы также const eight = () => 8; вместо const eight = thrice(() => 8);, так как это не работает.
Patrick Roberts 13.07.2019 00:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Заметь

thrice(() => {
  return 8;
});

это не функция, а вызов функции, поэтому eight равно 8. поэтому, чтобы исправить это:

eight = ()=> thrice(() => {
  return 8;
});
// or

eight =function(){ thrice(() => {
  return 8;
});};

Другие вопросы по теме