자바스크립트 화살표 함수와 this
자바스크립트에서 함수를 정의할 때, this
키워드는 매우 중요한 역할을 합니다. this
는 현재 실행 중인 함수의 컨텍스트를 가리키는 참조입니다. 하지만, 화살표 함수는 일반적인 함수와는 다르게 this
의 동작 방식이 다릅니다.
화살표 함수의 특징
화살표 함수는 다음과 같은 특징을 가지고 있습니다:
- 구형 함수와는 달리 화살표 함수는 항상 익명 함수입니다.
- 화살표 함수는 항상 외부 함수의
this
값을 상속받습니다. - 화살표 함수는 자신의
this
값을 갖지 않습니다. 대신, 상위 스코프의this
값을 사용합니다.
따라서, 화살표 함수를 사용하면 this
바인딩 관련 문제를 방지할 수 있습니다.
화살표 함수와 this
의 예시
function Person() {
this.age = 0;
setInterval(function growUp() {
this.age++; // TypeError: Cannot read property 'age' of undefined
}, 1000);
}
var person = new Person();
위의 코드에서 growUp
함수는 setInterval
함수에 의해 1초마다 호출되며, this.age
를 증가시키려고 합니다. 하지만, this
는 growUp
함수의 컨텍스트가 아닌 setInterval
함수의 컨텍스트를 가리킵니다. 따라서, this.age
는 undefined
로 평가되고 TypeError가 발생합니다.
이러한 문제를 해결하기 위해 화살표 함수를 사용할 수 있습니다.
function Person() {
this.age = 0;
setInterval(() => {
this.age++; // 정상적으로 동작
}, 1000);
}
var person = new Person();
위의 수정된 코드에서 화살표 함수를 사용하여 this
를 정확히 상속받아 사용할 수 있습니다. 따라서 this.age
는 예상대로 동작하게 됩니다.
결론
화살표 함수는 자바스크립트에서 this
와 관련된 문제를 해결하는데 유용한 기능입니다. 화살표 함수를 사용하면 this
가 항상 상위 스코프의 값을 갖게 되므로, this
바인딩 관련 오류를 방지할 수 있습니다.
하나의 주의할 점은 화살표 함수는 생성자 함수로 사용할 수 없으며, 메소드로만 사용할 수 있다는 것입니다.