FE/JavaScript 팔아요
[Note_코어자바스크립트] 3장 this
bomsbro
2021. 12. 21. 22:05
자바에서 this와 자바스크립트에서 this는 완전히 다른 개념이다.
헷갈리는 기능이지만 함수와 객체의 구분에서 자바스크립트에서는 유일한 기능이다.
this는 상황에 따라서 달라진다.
this는 실행 컨텍스트가 결정한다. 즉, 함수를 호출할 때 결정된다.
전역공간에서 this는 상위 주체가 없으므로 전역 객체를 가리킨다. undefined가 아니다.
전역객체는 브라우저에서는 window 노드에서는 global이다.
- 전역변수를 선언하면 자바스크립트 엔진은 걔를 전역 객체의 property로 할당한다.**
- -> 왜var는 전역객체의 프로퍼티이고 let은 전역객체의 프로퍼티가 안되는지??
자바스크립트의 모든 변수는 사실 특정 객체(lexical env)의 프로퍼티이다
전역변수에 할당한 값이 찍어도 그 값이 나오는 이유는 스코프 체인 때문이다.
전역변수의 delete명령은 안되고 전역객체의 delete명령은 된다. 즉 전역객체의 프로퍼티와 전역변수는 약간의 차이점은 있다.
메서드 내부에서의 this
*함수와 메서드는 다르다. 함수는 독립적이고 메서드는 의존적이다.
메서드는 객체의 프로퍼티로 할당하면 메서드가 되는게 아니고 객체의 메서드로 호출할 때만 메서드로서 동작한다.
즉 함수 내부의 this는 호출 방법에 따라 달라진다.
abc.method(x) 이런 식으로 어떤 객체가 호출을 하게된다면 무조건 this는 abc가 될 수밖에 없다.
자바스크립트에서 this는 호출한 주체에 대한 정보이다.
* 그런데 함수로서의 호출은 호출 주체가 정해지지 않기 때문에 this가 없다 *