본문 바로가기

[JS] this

[JS] this

this


https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/this

 

this - JavaScript | MDN

JavaScript에서 함수의 this 키워드는 다른 언어와 조금 다르게 동작합니다. 또한 엄격 모드와 비엄격 모드에서도 일부 차이가 있습니다.

developer.mozilla.org

 

method는 '어떤 객체의 속성으로 정의된 함수'를 말한다.

위의 megalomaniac 객체를 예로 든다면, getMembers는 megalomaniac 객체의 속성으로 정의된 함수인 '메소드'라고 할 수 있다. megalomaniac.getMembers()와 같은 형태로 사용(호출)할 수 있다.

사실은, 전역 변수에 선언한 함수도 웹페이지에서 window 객체의 속성으로 정의된 함수라고 할 수 있다.

window. 접두사 없이도 참조가 가능하기 때문에(window.foo()라고 사용해도 됨) 생략하고 쓰는 것뿐이다. 이렇듯, method는 항상 '어떤 객체'의 method이다.


따라서 호출될 때마다 어떠한 객체의 method일 텐데, 그 '어떠한 객체'를 묻는 것이 this이다.

예시로, obj이라는 객체 안에 foo라는 메서드를 선언하고, this를 반환한다고 했을 때 ( 예: let obj = {foo: function() {return this}}; )
 obj.foo() === obj 이라는 코드에 true가 반환될 것이다.

그러나 화살표 함수는 다르다. 자신의 this가 없다. 
* 화살표 함수에서의 this는 자신을 감싼 정적 범위(lexical context)이다. (전역에서는 전역 객체를 가리킴)
* 일반 변수 조회 규칙(normal variable lookup rules)을 따르기 때문에, 현재 범위에서 존재하지 않는 this를 찾을 때, 화살표 함수 바로 바깥 범위에서 this를 찾는다.

728x90
⬆︎