[JavaScript] 화살표 함수

seungyeon·2021년 2월 24일
2

JavaScript

목록 보기
8/10

ES6에서 새로 도입한 화살표 함수(arrow function)는 보통 함수 표현식을 축약한 형태로 표시된다.

// 함수 표현식
const add = function(a, b) {
	return a + b;
}

// 화살표 함수
const add = (a, b) => {
	return a + b;
  • 화살표 함수는 function 키워드를 화살표 => 로 축약해서 표시할 수 있다.
  • 함수의 본문(body)에 return문만 있는 경우, 화살표 함수는 중괄호 {}return을 생략할 수 있다. 이 경우 반드시 return과 중괄호는 함께 생략해야 한다.
    • return 없이 소괄호 () 만 사용하는 것은 가능하다. 이는 일반적으로 수식에서 괄호로 묶어주는 것과 같은 의미이다.
const add = (a, b) => a + b;   // 정상작동
const add = (a, b) => (a + b); // 정상작동
const add = (a, b) => {a + b}; // undefined 리턴 

함수 내의 표현식이 두 줄 이상인 경우에는 명시적으로 return과 중괄호를 사용하는 것이 좋다.

  • 파라미터가 한 개라면 소괄호를 생략할 수 있다.
const add5 = (x) => x + 5;
const add5 = x => x + 5;
  • 화살표 함수를 사용하면 클로저를 연속된 여러 개의 화살표로 표시할 수 있다.

    화살표 함수로 얼마나 클로저를 직관적으로 표시할 수 있는지 살펴보자.

    • 함수 표현식으로 클로저가 2개인 함수를 표시하면 아래와 같다.
      const adder(x) {
      	return function(y) {
      		return x + y;
      	}
      }
      
      화살표 함수를 사용하면 이렇게 간단하게 바뀐다.
      const adder = x => y => x + y;
      

    • 화살표 개수만 확인해도 클로저가 몇 갠지 쉽게 알 수 있다.
  • 화살표 함수를 이용한 클로저 표현 예시 2 (feat. DOM)

const htmlMaker = tag => textContent => `<${tag}>${textContent}</${tag}>`;
const liMaker = htmlMaker('li');

htmlMaker('div')('code states'); // `<div>code states</div>`
liMaker('1st item'); // `<li>1st item</li>`
liMaker('2nd item'); // `<li>2nd item</li>`

화살표함수로 HTML 작성하기

화살표 함수를 이용해 클로저를 표현하면 복잡하게 느껴지던 DOM 다루기도 쉬워질 수 있다.

const memberList = ['Heeseung', 'Jay', 'Jake', 'Sunghoon', 'Sunoo', 'Jungwon', 'Niki'];
const main = document.querySelector('#container');

function fetchMemberList(arr) {
	const ulElement = document.createElement('ul');
	ulElement.classList.add('members');
	arr.forEach((el) => {
		const liElement = document.createElement('li');
		liElement.classList.add('member');
		liElement.textContent = el;
		ulElement.appendChild(liElement);
	})
	main.append(ulElement);
}

fetchMemberList(memberList);

지금까지 DOM을 다루는 스프린트를 진행하면서 사용했던 방식이다. 익숙하긴 하지만 개인적으로 그닥 직관적이지 못하다고 느낀다.

const memberList = ['Heeseung', 'Jay', 'Jake', 'Sunghoon', 'Sunoo', 'Jungwon', 'Niki'];
const main = document.querySelector('#container');

const htmlMaker = (tag, className) => textContent => `<${tag} class="${className}">${textContent}</${tag}>`;
const liMaker = htmlMaker('li', 'member');

main.innerHTML = htmlMaker('ul', 'members')(memberList.reduce((acc, curr) => {
  return acc + liMaker(curr);
}, ''))

화살표함수로 클로저를 표현한 방식으로 바꿔본 것이다. 첫번째 코드와 결과는 비슷하다. (줄바꿈이 없다는점을 제외하면 동일하다.)
innerHTML을 사용해야 한다는 점이 걸리긴 하지만 엄청 간단해지고 훨씬 직관적이다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN