Я работаю, вызывая функцию изнутри к внешней функции.В качестве иллюстрации, функция и их вызов с параметрами и последующие вызовы.
five()
expression(5)
5
times(5)
function with closure over x = 5
seven(function)
expression(7, function)
function(7)
35
В конце вы найдете тот же результат, но с массивом функций в обратном порядке.Функции вызываются с помощью аккумулятора, который возвращает результат вызова функции.
Этот подход является реальной реализацией, возможно, позже (или никогда) вы можете использовать фактическую экспериментальную оператор конвейера |>
, который имеет следующий синтаксис:
expression |> function
Или с вашими функциями: undefined |> пять |> раз |> семь
function expression(number, operation) {
console.log('expression');
if (!operation) return number;
return operation(number);
}
function five(operation) {
console.log('five');
return expression(5, operation);
}
function seven(operation) {
console.log('seven');
return expression(7, operation);
}
function times(x) {
console.log('times');
return function(y) {
return y * x;
}
}
console.log(seven(times(five()))); // 35
console.log([five, times, seven].reduce((value, fn) => fn(value), undefined))