티스토리 뷰

Languages/JS

this

돈파치 2021. 11. 15. 21:26

this란?

함수가 어떻게 호출되는지에 따라 동적으로 결정되는 녀석(?)이다.

 

this의 목적

작성된 코드를 여러 목적으로 재사용하기 위해 존재

 

this의 특징

  • 전역 및 함수 바디에서 사용 가능하다.
  • class 안에서 사용하는 this는 생성자 함수에서 사용하는 this와 동일하다.

전역에서의 this

  • 브라우저 환경에서 this를 전역에서 사용하면 이 this는 전역 객체인 window객체를 가리킨다.
  • 그래서 전역에서 const, let, var 없이 valueA라는 변수를 사용할 경우 window.valueA와 같다.

일반 함수에서의 this

  • this를 사용하는 일반 함수를 호출하면 this는 전역 객체인 window객체를 가리킨다.
  • 단, 함수 내에서 'use strict'키워드를 사용하면 this는 undefined가 된다.

생성자 함수에서의 this

  • this를 사용하는 생성자 함수를 new를 통해 호출하면 this는 해당 생성자 함수의 내부 객체를 가리킨다.
  • 생성자 함수를 new로 호출하지 않고 그냥 호출할 경우 this는 전역 객체인 window를 가리킨다.

화살표 함수에서의 this

  • this를 사용하는 화살표 함수를 호출하면 this는 부모환경의 this를 가리킨다.
name = "hello"

const a = {
  name : "jyp",
  getName(){
    setTimeout(() => {
      console.log(this.name)
    },1000)
  }
}

console.log(a.getName()) // this는 a 객체를 가리키며 "jyp"를 반환

 

  • 그래서 중첩된 함수에서 this를 사용할 경우 부모 객체를 가리킨다.
name = "hello"

const a = {
  name : "jyp",
  getName(){
    setTimeout(() => {
      console.log(this.name)
    },1000)
  }
}

console.log(a.getName()) // this는 a 객체를 가리키며 "jyp"를 반환

메소드 내에서의 this

  • 객체내에 정의된 메소드 안에서 this를 사용하고 객체를 통해 메소드를 호출하면 this는 해당 객체를 가리킨다.
const a = { 
  name : "jyp", 
  getName(){ 
    return this.name 
  } 
} 

console.log(a.getName()) // this는 a를 가리키며 "jyp"를 반환

 

  • 단, 메소드 안에서 this를 정의했지만 메소드를 다른 변수에 할당하고 그 변수를 통해 메소드를 호출하면 일반적인 함수 호출과 같이 this는 전역 객체를 가리킨다.
name = "hello" 

const a = { 
  name : "jyp", 
  getName(){ 
    return this.name 
  } 
} 

const b = a.getName 

console.log(b()) // this는 window 객체를 가리키며 hello를 반환

 

  • 메소드 안에서 중첩 함수가 작성되었을 경우 내부 함수의 this는 전역 객체인 window를 가리킨다.
name = "hello" 

const a = { 
  name : "jyp", 
  getName(){ 
    setTimeout(function(){ 
      console.log(this.name) 
    },1000) 
  } 
} 

console.log(a.getName()) // this는 window 객체를 가리키며 hello를 반환

 

위와 같이 this에 대해 정리해봤는데 정말 JS 너란 놈은 배우면 배울수록 신기한 넘이다...

하지만 이런 JS라서 점점 더 JS에 대해 자세히 알고 싶고 흥미가 생긴다. 

반응형

'Languages > JS' 카테고리의 다른 글

Promise 갖고 놀아 보기  (0) 2023.05.19
자료형  (0) 2021.10.08
가비지컬렉션  (0) 2021.10.08
이벤트 루프(event loop)  (0) 2021.05.14
비동기 2편(async, await)  (0) 2021.05.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형