Я пытаюсь создать функцию «трижды», которая возвращает другую функцию.
У меня есть следующий код ниже:
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. Но я концептуально не понимаю, почему.
Ваша основная проблема заключается в том, что вы вызываете функцию в thrice
, а не просто возвращаете ее. Измените на return inputFunc
, и он будет работать как положено.
@Mark: кажется, я понимаю; Я вызываю функцию внутри трижды, когда я должен просто вернуть полную функцию, которую позже можно будет вызвать
@PineNuts0 Как вариант, return x => inputFunc(x)
Объявлены только две функции (=>
), но вы вызываете три (()
). Какой из вызовов вы удаляете, не имеет значения, вы также можете добавить функцию, но это зависит от вашего варианта использования.
const thrice = fn => fn;
приведет к тому, что value
станет 8
. Но тогда вы могли бы также const eight = () => 8;
вместо const eight = thrice(() => 8);
, так как это не работает.
Заметь
thrice(() => {
return 8;
});
это не функция, а вызов функции, поэтому eight
равно 8.
поэтому, чтобы исправить это:
eight = ()=> thrice(() => {
return 8;
});
// or
eight =function(){ thrice(() => {
return 8;
});};
const thrice = f => x => f(f(f(x)))
применит функциюf
кx
три раза... Думаю, вам нужно что-то ближе к этому. То естьconst add1 = x => x + 1; const add3 = thrice(add1); add3(10); // =>13
.