this

eunji lee·2022년 6월 20일
0

자바스크립트

목록 보기
3/5

this

  • 전역 객체(javascript 는 window이므로, 전역 객체=window 라고 표기한다)
  1. 전역 객체로 선언한 변수는 window.변수로 확인 가능한데 그 이유가 무엇일까?
  • 전역공간에서 변수를 선언하면, 전역객체의 프로퍼티로 할당한다.
  • 위와 같이 이해해도 무방하지만, 상세히 살펴본다면 자바스크립트의 동작은 아래와 같다.
    1) 실행컨텍스트는 호출 될때, 변수를 수집해서 l.e (lexicalEnvironment)의 프로퍼티로 저장한다.
    2) 전역 컨텍스트의 le 는 GlobalEnv를 참조한다.(GlobalEnv: 전역 객체를 참조)
  1. 전역 객체에 직접 할당할 경우 차이 - delete 안됨
    -자바스크립트 개발자의 안전장치라고 이해하면 됨
    (전역 변수로 선언한 경우, 해당 프로퍼티의 configurable속성이 false로 설정되므로, 삭제가 되지 않는다)

  2. this: 호출한 주체에 대한 정보가 담긴다.
    -this를 바인딩 하는 시점: 함수가 호출 될 때

함수vs 메서드 this

함수를 실행하는 방법은 여러가지지만, 함수로서 호출, 메서드로 호출 하는 두가지에 대한 this 차이를 정리한다.

-함수와 메서드의 개념 정리
함수: 독립적인 기능 수행
메서드: 호출한 대상 객체애 관한 동작 수행

-자바스크립트에서는 이 둘을, 상황별로 this 키워드에 다른값을 부여하게 함으로써 차이를 둔다.

  • 객체의 프로퍼티에 할당된 함수=메서드로 이해하면 자바스크립트에서는 혼란을 겪을 수도 있다.
    -자바스크립트에서는 메서드를 구분할때, 객체의 메서드로 호출 한 경우에만 메서드로 동작한다. (어떻게 호출했느냐가 중점)
var obj(){
	method: func2
    method() //메서드 x (함수로 호출) 
}
obj.method  //메서드o, this:obj
obj[method]//메서드o

함수로 호출 할때 내부의 this

-함수로서 호출한 경우에는 호출 주체를 명시하지 않고, 개발자가 직접 관여해서 실행한 것이기 때문에, 호출 주체의 정보를 알 수 없다.
->this 는 전역객체를 가리킨다.

->함수를 실행하는 주변환경(메서드 내부인지, 함수 내부인지)는 중요치 않고, 해당 함수를 호출 하는 구문 앞에 점이나 대괄호 표기가 있었는지가 관건이다!

this 우회하기

1) this 객체를 담아놓고 넘겨주기
2) this를 바인딩 하지 않는 함수 사용하기
(arrow 함수)
3) 콜백 함수에서 this 지정하는 방법
->정의하지 않은 경우, 전역 객체를 바라본다.
4) call/apply 활용 하기
5)

생성자 함수 내부의 this

-new 명령어와 함께 함수를 호출하면, 생성자로 동작하는데, 이 경우this는 새로만들 인스턴스 자신이 된다.

profile
안녕하세요! 이은지 입니다.

0개의 댓글