함수(function)

Sunwoo·2021년 4월 23일
0

함수

함수는 일종의 오브젝트이다. 예를들어 함수의 . (닷)을 붙이면 오브젝트 처럼 함수의 속성 값들을 사용할 수 있다.

// parameter에 값이 없을 경우 이렇게 해야했다.
function showMessage(message, from) {
  if (from === undefined) {
    from = "unknown";
  }
  console.log(`${message} by ${from}`);
}

//ES6 부터는 디폴트 인자값을 지정해줄 수 있다.
function showMessage(message, from = 'unknown') {
  console.log(`${message} by ${from}`);
}

ES6 문법을 사용하면 인자로 들어오는 파라미터에 디폴트 값을 심어줄 수 있다.

function printAll(...args) {
  for (let i = 0; i < args.length; i++) {
    console.log(args[i]); // a,b,c
  }
  for (const arg of args) {
    console.log(arg); // a,b,c
  }
  args.forEach((arg) => console.log(arg)); // a,b,c
}
printAll("a", "b", "c");

ES6 배열 처리를 특별하게 할 수 있다. 배열을 통째로 보낼 땐 상관없지만, 나열된 인자를 받을 땐 '...' 일명 닷닷닷을 사용하면 편하다. 배열을 이어서 받을 수도 있다. 배열 안의 내용을 확인하는 것은 배열에서 더 자세히 하겠지만 of와 forEach를 사용하면 배열 데이터를 순차적으로 가져온다.

// bad
function upgradeRank(user) {
  if (user.point > 10) {
    // long upgrade logic...
  }
}
// good
function upgradeRank(user) {
  if (user.point <= 10) {
    return;
  }
   // long upgrade logic... 
}

코드의 효율성을 위해 빨리 리턴해서 끝내는 구조가 좋다. 위 코드를 보면 포인트가 10 이상일때 업그레이드 한다고 할때, 10 이전이라면 그냥 종료해버리는 것이 좋다. 굳이 10번 돌필요가 없기 때문. 이와같이 구조를 잘 생각해서 빨리 처리하는 것이 좋은 함수이다.

익명함수(Anonymous function)

const print = function () { // anonymous function
	console.log('print');
}

이름이 없는 함수를 anonymous function이라고 하고, 이름이 있는 함수를 named function이라고 한다. 함수 정의도 hoisting이 적용된다.

콜백함수(callback)

함수를 인자로 전달해서 상황에 맞으면(해당 함수가 존재하면) 해당 함수를 내부적으로 사용한다.

function Quiz(answer, printYes, printNo) {
	if(answer === 'korea'){
		printYes();
	} else {
		printNo();
	}
}
const printYes = function() {
	console.log('Yes!');
}
const printNo = function() {
	console.log('No!');
}
Quiz('Korea', printYes, printNo); // Yes!
Quiz('kkoria', printYes, printNo); // No!

function express에서 named function을 사용하는 이유는 디버깅을 할 때, 스택 트레이스에 함수 이름이 나오게 하기 위해서 사용한다. 혹은 재귀함수로 사용할 때이다.

Arrow function

const simplePrint = function() {
	console.log('simplePrint!');
};
// 위를 다음과 같이 화살표 함수로 축약한다.
const simplePrint = () => console.log('simplePrint!');
// 인자가 있을 경우 화살표 함수
const add = (a, b) => a + b;
// 여러문장일 경우에는 {} 블럭처리 후 return 해줘야 한다. 
const multiply = (a, b) => {
	return a * b;
};

IIFE : Immediately Invoked Function Expression

(function PrintIIFE() {
	console.log('IIFE');
})();

선언함과 동시에 함수 실행.

profile
한 줄 소개 너무나 어려운 질문이다.

0개의 댓글