이 포스팅은 2019년 11월에 작성된 글입니다.
화살표 함수를 쓰게 되면 확실히 코드가 짧아지는 것을 알 수 있다.
//ES5
var sum = function(x){ return x+x};
console.log(sum(5)); //10
//ES6
const sum = x => x + x;
console.log(sum(5)); //10
그럼 첫번째로 화살표 함수는 익명으로 사용되기 때문에 콜백함수로도 사용할 수 있다는 것이다.
const arr = [1,2,3,4];
var even = arr.filter( x => x % 2 === 0 );
//[2,4]
//ES5
function Person(){
this.age = 0; // this는 Person을 참조한다.
setInterval(function up(){
this.age++; //여기서 this는 fn안에 fn에 있으므로 Person이 아닌 Window를 가르킨다.
}, 1000);
}
var p1 = new Person();
//age에 변화가 없다.
//ES6
function Person(){
this.age = 0; // tihs는 Person을 참조한다
setInterval(() => {
this.age++; //이때 this는 Person을 참조한다.
}, 2000);
}
var p1 = new Person();
//p1의 결과 값은 계속 2초마다 age가 증가한다.
화살표 함수는 전역 컨텍스트에서 실행될 때 this를 새로 정의하지 않아도 된다.
대신 코드에서 바로 바깥의 함수(혹은 class)의 this값이 사용된다.
또한 call 또는 apply를 사용하는 경우 this가 바인딩되지 않기 때문에, call, apply의 경우 인자만 전달할 수 있다.
또한 자신만의 this를 생성하지 않기 때문에 화살표함수는 arguments객체를 가질 수 없다.
화살표 함수를 사용하게 되면 new 연산자를 사용할 수 없다는 것이다.

prototype 속성을 사용할 수 없다.
일반함수일 경우 prototype을 갖게 된다.

하지만 화살표 함수를 사용하게 되는 경우, prototype을 찾을 수 없다.

짧은 함수를 작성할 수 있다는 점과, this 바인딩 부분에서 편하다고 생각한다. 하지만 위의 장단점에서 단점도 존재하기 때문에 상황에 맞게 잘 사용해야 한다고 생각한다.
참고한 블로그
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/애로우_펑션
https://poiemaweb.com/es6-arrow-function
https://beomy.tistory.com/19