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가 없다 *