ES5문법에서 소개된 화살표 함수(arrow function)는 기존 함수 표현식의 대안으로 함수와 동일하지만 몇 가지 차이점과 제한사항이 존재한다.
먼저 기존 함수 표현식은 아래와 같이 함수 선언 후 변수(또는 상수)에 할당하는데, 화살표 함수는 이 표현식을 간편하게 바꾸어 사용할 수 있도록 한다.
const test = function(a, b){
return a * b;
}
test = (a, b) ⇒ {
return a+b
}
더 간단하게,
test = (a,b) ⇒ a * b
기존함수 표현식과 동일하게, Rest parameters와 Default parameters, Destructuring이 지원된다.
하지만 이와 다르게 화살표 함수는
→ this는 동일한 객체 내 변수나 함수를 호출할 때 사용하는데, 화살표 함수는 this 바인딩을 제공하지 않기 때문에 lexical context 안의 this의 값을 유지한다. (이 개념에 대해서는 추후에 깊게 조사해봐야겠다.)
메서드로 사용할 수 없다는 의미를 이해하려면 먼저 함수와 메서드의 차이가 무엇인지 알아야 한다.
→ 생성자는 인스턴스화 된 클래스에서 의미 있는 개념이기 떄문에 인스턴스 객체를 생성할 수 없다면 생성자도 존재할 수 없고 생성자 생성 사용하는 new 연산자 또한 의미가 없기 떄문에 접근이 불가능하다.
→ 객체를 상속할 때 프로토타입이라는 방식을 사용하나 화살표 함수는 객체 상속 즉, 메서드로 사용할 수 없기 때문에 프로토타입을 지니고 있지 않다.
객체나 클래스에 종속되어 어떠한 로직을 처리하는 코드들의 집합으로 객체나 클래스에 종속되어 있기 때문에 객체 혹은 클래스의 프로퍼티에 접근이 가능하다.
const Auth = {
namespaced: true,
state: {
jwtToken: '',
refreshToken: '',
},
mutations: {
logIn: (state, { jwtToken, refreshToken }) => {
state.jwtToken = jwtToken
state.refreshToken = refreshToken
localStorage.setItem('jwtToken', jwtToken)
localStorage.setItem('refreshToken', refreshToken)
},
},
actions: {},
getters: {},
}
store.commit('Auth/logIn')
commit문을 실행할 때에 'logIn' 이 아닌 'Auth/logIn' 가 되는 이유이다.
독립적으로 존재하여 어떠한 로직을 처리하는 코드들의 집합으로 매개변수와 결과값은 선택적으로 선언할 수 있다.
const moveOptions = event => {
switch (event.key) {
case 'Enter':
pressEnter(event)
break
case 'ArrowDown':
pressArrowDown()
break
case 'ArrowUp':
pressArrowUp()
break
case 'Escape':
pressArrowUp()
break
}
}
메서드와 함수의 차이를 간략히 정리하면 아래와 같다.
메서드는 클래스나 객체에 종속되어 있고 함수는 독립적으로 존재한다.
또한, 메서드는 클래스 내에서 함수 선언식으로 명시해야하지만 함수는 함수 표현식과 함수 선언식 둘다 사용이 가능하다.