초보 개발자의 일기

this 본문

Frontend practice/java script

this

판다꼬마 2024. 3. 24. 22:53
728x90

this는 함수가 호출될 때 정해진다!!

 

 

자바스크립트의 this는 다른 언어의 this와는 다르다.

 

this를 콘솔에 찍어보자.

그럼 이렇게 window가 찍히게 되는데

this는 기본적으로 window다.

 

여기서 window란?

window 객체란

window 객체는 웹 브라우저의 창을 나타내는 객체로, 대부분의 웹 브라우저에서 지원하고 있다.

 

1. 브라우저 안의 모든 요소들이 소속된 객체로, 최상위에 있기 때문에 어디서든 접근이 가능하다고 해서 전역 객체라고도 부른다. 

2. 일반적으로 우리가 열고 있는 브라우저의 창을 의미하고, 이 창을 제어하는 다양한 메서드를 제공한다.


 

globalThis

js 환경에서는 window

node 환경에서는 global이다.

하지만 최근에 globalThis로 합쳐지게 되었다.


 

this가 변하는 경우

 

위에서도 말했듯이 this는 함수가 호출될 때 정해진다.

 

예시를 들어보자.

 

ex1)

const obj = {
    name: 'zerocho',
    sayName() {
        console.log(this.name);
    }
};

 

 

여기서 this는 obj이다.

 

ex2)

const sayN= obj.sayName;

 

this는 함수가호출될 때 정해지기 때문에 여기서 this는 window다.

this에 특별한 동작이 없으니 window다.

함수 앞에 객체가 붙으면 this가 그 객체가 된다.

 

ex3)

const obj = {
    name: 'zerocho',
    sayName: () => {
        console.log(this.name);
    }
};

 

화살표 함수인지 아닌지도 큰 역할을 한다.

여기서 this는 window

 

ex4)

function Human(name) {
    this.name = name;
}

이렇게 new를 사용할 경우에는 this가 객체 자기 자신이 된다.

 

ex5)

그냥 sayName()인 경우에는 this가 window이다.

하지만 bind, apply, call을 사용하면

sayName.bind({ name: 'zerocho'})();
sayName.apply({ name: 'zerocho'});
sayName.call({ name: 'zerocho'});

 

 

 

bind는 새로운 함수를 만들어주고

apply와 call은 새로운 함수를 만들고 호출까지 해준다.


 

총정리

this는 기본적으로 window다.

 

this가 변하는 경우!

  • 함수앞에 객체가 붙으면 this가 그 객체가 된다.
    • obj.sayName() 이렇게 되면 obj가 this다.
  • new를 사용해 호출하는 경우
  • bind, apply, call을 사용하여 this를 직접 바꾸는 경우

 

=> 함수를 선언할 때 정해지는 것이 아니라 함수를 호출할 때 결정이 된다!!!


 

참고영상

https://www.youtube.com/watch?v=pgo6URFz8tc&list=PLcqDmjxt30Rt9wmSlw1u6sBYr-aZmpNB3&index=7

 

728x90

'Frontend practice > java script' 카테고리의 다른 글

호이스팅  (0) 2024.01.28
스코프체인  (0) 2024.01.28
함수와 함수의 호출, 고차함수  (0) 2024.01.20
React prop  (1) 2022.05.26
React State  (1) 2022.05.24