[javascript] Function과 HOF(Higher Order Function)

dev stefanCho·2021년 12월 7일
0

javascript

목록 보기
20/26

function은 js에서는 object일 뿐이다.

Function


function이 object이기 때문에 가능한 것

1. function은 () 로 invoke할 수 있다.

function func() {
	console.log('hello');
}

func();

2. function은 property를 갖고 있다.

  • call, apply, bind와 같은 property를 갖고 있다.
function func() {
	console.log('hello');
}

func.call();

3. function은 name property를 가질 수 있다. (optional)

function func() {
	console.log('hello');
}

func.hi = 'hi';
console.log(func.hi) // hi

4. function은 parameter가 될 수 있다.

function func() {
	console.log('hello');
}

function a(fn) {
  fn()
}

a(function() { return 'hi' }); // hi



Higher Order Function (HOF)


HOF로 more generic 하게 function을 만들 수 있다!

특징

  • function을 argument로 받음
  • function을 return함

일반 function과 비교하기

function() : 기능과 데이터가 정해져 있음
function(args) : 기능은 정해져 있고, 데이터는 invoke할 때 넘김
HOF : 기능과 데이터를 나중에 넘김 (더 유연하게 사용할 수 있음)

예시

인증을 하고 login을 하는 어떤 기능이 있다고 하자, 이때, login 하는 기능에 parameter로 authenticate에 대한 것을 받고, user 정보도 따로 받는다면, 각 user에 따른 어떤 authenticate function을 다르게 동작시킬 수 있다.

const authenticate = (verify) => {
  const array = [];
  for (let i = 0; i < verify; i++) {
    array.push(i);
  }
  return true;
}

const loginSuccess = (user) => `${user} Welcome!`;

const login = (user, validation) => {
  if (user === 'admin') {
    validation(10000);
  } else {
    validation(2000);
  }

  return loginSuccess(user);
}

login('admin', authenticate);
login('Susan', authenticate);
profile
Front-end Developer

0개의 댓글