Skip to content

Latest commit

 

History

History
97 lines (71 loc) · 1.38 KB

2-6-Function.md

File metadata and controls

97 lines (71 loc) · 1.38 KB

2.6. Higher-order function, pure function, side effects

Function definition

function sum(a, b) {
  return a + b;
}

Named function expression

const sum = function sum(a, b) {
  return a + b;
};

Anonymous function expression

const sum = function (a, b) {
  return a + b;
};

Arrow function (Lambda function)

const sum = (a, b) => {
  return a + b;
};

Lambda expression

const sum = (a, b) => a + b;
const sum = (a) => (b) => a + b;

// prettier-ignore
const hash =
  (data = {}) =>
    (key, value) => ((data[key] = value), data);

Superposition

const expr2 = sum(
  pow(mul(5, 8), 2),
  div(inc(sqrt(20)), log(2, 7))
);

Composition

const compose = (f1, f2) => (x) => f2(f1(x));
// prettier-ignore
const compose = (...funcs) => (...args) =>
  funcs.reduce((args, fn) => [fn(...args)], args);

Partial application

// prettier-ignore
const partial = (fn, x) => (...args) => fn(x, ...args);

Currying

const result = curry((a, b, c) => a + b + c)(1, 2)(3);

Side effects

Higher-order Function

Wrapper

const sum = (a, b) => a + b;

console.log('Add numbers: 5 + 2 = ' + sum(5, 2));
console.log('Add floats: 5.1 + 2.3 = ' + sum(5.1, 2.3));
console.log(`Concatenate: '5' + '2' = '${sum('5', '2')}'`);
console.log('Subtraction: 5 + (-2) = ' + sum(5, -2));