function은 js에서는 object일 뿐이다.
function func() {
console.log('hello');
}
func();
function func() {
console.log('hello');
}
func.call();
function func() {
console.log('hello');
}
func.hi = 'hi';
console.log(func.hi) // hi
function func() {
console.log('hello');
}
function a(fn) {
fn()
}
a(function() { return 'hi' }); // hi
HOF로 more generic 하게 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);