자스는 객체 생성을 class 대신 function으로 생성하고 프로토타입체인으로 상속했다.


물론 옛날 문법이야기고 지금 이딴식으로 코드짜면 대가리를 때려도 무죄임


여튼 예전엔 객체 생성을

function Human() {
this.name = '침팬지'
}


이딴식으로 구현했는데 대체 무슨 생각으로 만들었는지 모르겠음.


요컨데 function을 사용하면 자체적인 this 스코프를 가지게 된다.


여튼 이로인한 문제가 생겼는데 객체의 메서드 내에서 새로운 함수를 사용할때다.


Human.prototype.say = function() {
  const print = function() {
    console.log(this.name)
  }
 
  print()
}


이와같은 시발스러운 코드가 가능하다는 것이다.

위에서 언급했다시피 각 function 마다 자체 this 스코프가 존재하고

이 문제가 꼬여서 print함수는 콘솔에 undefined가 찍히게 된다. 침팬지가 아니라.



이런 문제를 해결하기 위해서 옛날엔

Human.prototype.say = function() {

  const self = this
  const print = function() {
    console.log(self.name)
  }
 
  print()
}

이렇게 사용하곤했는데


이런 개같은 경우를 해결하기 위해 등장한게 화살표 함수임


Human.prototype.say = function() {
  const print = () => {
    console.log(this.name)
  }
 
  print()
}


화살표함수는 자체적인 this 스코프를 가지지 않도록 설계되었다. 이 화살표 함수가 일반적으로 말하는 함수와 더 가까울 거임



고로 this 문제로 골머리를 쌓고있는 자린이들이 있다면

화살표 함수를 애용해보도록하자



- dc official App