JavaScript의 this는 기존 언어에서 사용하던 this와는 다릅니다. 비슷한 의미로 사용될 때도 있지만, JavaScript의 this는 여러 가지 함수가 호출되는 방식(호출 패턴)에 따라 참조(바인딩)하는 객체가 다르기 때문입니다.
자바에서의 this는 인스턴스 자신을 가리키는 참조변수입니다. this가 객체 자신에 대한 참조 값을 가지고 있다는 것입니다. 주로 매개변수와 객체 자신이 가지고 있는 변수의 이름이 같을 경우 이를 구분하기 위해서 사용됩니다.
javascript의 this가 해당 함수 호출 패턴에 따라 어떻게 객체를 참조(바인딩)하는지에 대한 규칙
1. 기본적으로 this는 전역 객체를 참조한다.
2. 메소드 내부의 this는 해당 메소드를 호출한 부모 객체를 참조한다.
3. 생성자 함수 코드 내부의 this는 새로 생성된 객체를 참조한다.
4. call()과 apply() 메소드로 함수를 호출할 때, 함수의 this는 첫 번째 인자로 넘겨받은 객체를 참조한다.
5. 프로토타입 객체 메소드 내부의 this도 해당 메소드를 호출한 부모 객체를 참조한다.
6. JavaScript의 this 키워드는 접근제어자 public 역할을 한다.
JavaScript에서는 내부 함수 호출 패턴을 정의해 놓지 않기 때문입니다. 내부 함수도 결국 함수이므로 이를 호출할 때는 함수 호출로 취급되어 함수 호출 패턴 규칙에 따라 내부 함수의 this는 전역 객체를 참조하게 됩니다.
[출처] javascript의 this 키워드 를 요약
함수 실행에 있어서 this의 바인딩은 함수의 직접적인 호출부에 따라 달라진다. 이단 호출부를 식별한 다음 4가지 규칙을 열거한 우선순위에 따라 적용한다.
1. new로 호출했다면 새로 생성된 객체로 바인딩된다.
2. call이나 apply 또는 bind로 호출됐다면 주어진 객체로 바인딩된다.
3. 호출의 주체인 콘텍스트 객체로 호출됐다면 바로 이 콘텍스트 객체로 바인딩된다.
4. 기본 바인딩에서 엄격 모드는 undefined, 그 밖엔 전역 객체로 바인딩된다.
self
는 통상적인 변수 이름이지만, 바깥쪽의 this
를 참조하기 위해 일반적으로 사용된다. 또한 클로저와 결합하여 this
의 값을 주고 받는 용도로 사용할 수도 있다.
[stackoverflow의 동일 질문] difference between using variable self vs this
[javascript guide] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide
[opentutorials의 javascript] https://opentutorials.org/module/532/4650
[javascript 클로저] http://www.gliderwiki.org/wiki/137
출처: https://k9e4h.tistory.com/141 [Kim's :D]
'FE > JS' 카테고리의 다른 글
JS - var,let,const (0) | 2019.07.11 |
---|---|
JS - 메모리 (0) | 2019.07.10 |
JS 공부하기 -3 (0) | 2019.07.05 |
JS - 공부하기2 (0) | 2019.07.01 |
JS - 공부하기1 (0) | 2019.06.25 |
댓글