자바스크립트의 this는 함수가 호출되는 방식에 따라 동적으로 결정된다.
1. 전역컨텍스트에서 this는 전역 객체를 참조한다.
2. 메서드에서 this는 해당 객체를 참조한다.
3. 화살표 함수는 자체적인 this를 가지지 않고 상위 스코프의 this를 상속받는다.
4. call, apply, bind 메서드를 통해 this를 명시적으로 설정할 수 있다.
foo 의 this는 obj
obj.foo()로 호출되었기 때문에 호출 컨텍스트는 obj 이므로 이때의 this는 obj이다.
bar의 this는 window
foo 내부에서 bar()를 호출하였으나, obj와 연결된 메소드가 아니다.
단순히 foo안에서 정의된 내부 함수일 뿐..!
즉 일반 함수로 호출되었기 때문에 호출 컨텍스트는 window가 된다.
일반 함수 호출 시 this는 기본적으로 window객체를 참조한다 ( 엄격 모드에서는 undefined )
화살표 함수에서의 this
화살표 함수는 this를 가지고 있지 X
대신 상위 스코프의 this를 상속받는다!
왼쪽 코드의 bar함수는 일반 함수로 호출된다. 그러므로 this는 window를 참조하기 때문에
전역 객체 name인 banana가 된다.
오른쪽 코드의 bar함수는 화살표 함수이기 때문에 this가 존재하지 않고, 바로 상위 스코프의 this를 상속 받는다.
그러므로 foo의 this인 obj를 참조하여 obj의 name인 apple값을 받게 된다.
JS | this(2) : 일반함수와 화살표 함수의 this
일반함수는 함수 호출방식에 따라 this에 바인딩되는 객체가 동적으로 달라지는 것에 반해, 화살표 함수는 정적으로 결정된다. 저번 문제 이어 this에 대해 더 자세히 알아보았다.
velog.io
📚 자바스크립트 화살표 함수 사용법 총정리
화살표 함수 (Arrow function) 자바스크립트에서 함수를 만들 때는 function 키워드를 사용하여 정의할 수 있다. 예를들어 두 수의 합을 구하는 함수는 다음과 같이 작성할 수 있다. function sum(a, b) { re
inpa.tistory.com
'Javascript' 카테고리의 다른 글
[Javascript] scrollIntoView() - 스크롤 이동하기 (0) | 2022.02.27 |
---|---|
[ JavaScript ] 실행 컨텍스트와 스코프 체인 (0) | 2021.04.08 |
[ JavaScript ] Scope란?! (0) | 2021.04.08 |
[Javascript] filter( ) (0) | 2020.07.19 |
[Javascript] 가위바위보 (0) | 2020.07.08 |