자바스크립트의 this

DevOps 블로그·2022년 3월 21일
1

Q: this에 대해서 설명하시오.

A: this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수 입니다. this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조 할 수 있습니다. 다만 어떻게 호출했는지에 따라서 this에 바인딩할 객체가 달라 집니다.

첫 번째로는 함수 호출일 경우 입니다.
기본적으로 this는 전역객체(Global object)에 바인딩 됩니다. 전역함수는 물론이고, 내부함수의 경우에도 this는 외부함수가 아닌 전역객체에 바인딩 됩니다.

두 번째로는 메소드 호출 입니다.
함수가 객체의 프로퍼티 값이면 메소드로서 호출 됩니다. 이 때 메소드 내부의 this는 해당 메소드를 소유한 객체, 즉 해당 메소드를 호출한 객체에 바인딩 됩니다. 즉 메소드 이름 앞의 마침표(.) 연산자 앞에 기술한 객체가 바인딩 됩니다. 메소드 내부의 this는 메소드를 소유한 객체가 아닌 메서드를 호출한 객체에 바인딩 됩니다.

네 번째는 Function.prototype.apply/call/bind 메서드에 의한 간접호출 입니다.
apply, call, bind 메서드는 Function.prototype의 메서드 입니다. 이들 메서드는 모든 함수가 상속 받아 사용할 수 있습니다. Function.prototype.apply, Function.prototype.call 메서드는 this로 사용할 객체와 인수리스트를 인수로 전달받아 함수를 호출합니다.

함수 호출 방식에 따라 this가 동적으로 결정되는 일반함수와 달리 화살표 함수는 함수가 선언될 때 this에 바인딩될 객체가 정적으로 결정됩니다. 화살표 함수의 this는 언제나 상위 스코프의 this를 가리킵니다.

profile
IT 엔지니어를 향해 살아가는, 공부하는 기록들을 모아두고 있습니다.

0개의 댓글