기존 함수표현의 컴팩트한 대안으로 나온 ES6 문법

기존과의 차이점

call, apply, and bind

3가지 메소드는 Arrow function에 적합하지 않다.

Arrow func는 다른 스코프내에서 실행될 수 있도록 설계되었기 때문임.

Arrow func은 정의된 스코프를 기반으로 this 를 설정하기 때문임.

예제

// ----------------------
// Arrow Example
// ----------------------

// A simplistic object with its very own "this".
var obj = {
    num: 100
}

// Setting "num" on window to show how it gets picked up.
window.num = 2020; // yikes!

// Arrow Function
var add = (a, b, c) => this.num + a + b + c;

// call
console.log(add.call(obj, 1, 2, 3)) // result 2026

// apply
const arr = [1, 2, 3]
console.log(add.apply(obj, arr)) // result 2026

// bind
const bound = add.bind(obj)
console.log(bound(1, 2, 3)) // result 2026

Arrow func의 가장 큰 benefits은 DOM level methods인 setTimeout, setInterval, addEventListener을 적절하게 실행하기 위해 클로저, call, apply, bind가 필요한 상황에서 사용할 수 있음.

=> 예제


// Arrow Function방식으로 호출할 때
function objFunction() {
  console.log('Inside `objFunction`:', this.foo);
  return {
    foo: 25,
    bar: () => console.log('Inside `bar`:', this.foo),
  };
}

objFunction.call({foo: 13}).bar(); // objFunction의 `this`를 오버라이딩합니다.

Inside `objFunction`: 13 // 처음에 인자로 전달한 값을 받음
Inside `bar`: 13 // Arrow Function에서 this는 일반 인자로 전달되었기 때문에 이미 값이 13로 지정됩니다.