날짜: 2022년 9월 29일 목요일

키워드 및 질문

본문

<aside> 📌 요약: 프로토타입은 객체의 유전자다. 상속을 받으면 부모의 프로퍼티와 메서드를 복사하는게 아니라 부모의 주소를 가져서 참조하는 것이다. var는 호이스팅이 되어 undefined 값을 가진채로 있다. let과 const는 호이스팅이 되긴 하지만 선언부만 올라가기에 값을 할당하기 전에 사용하면 에러를 띄운다. (TDZ) 함수 선언문은 호이스팅이 되어 정의문 위에서도 사용할 수 있다. 함수 표현식은 함수 객체의 값이 할당되어야 하기 때문에(이는 런타임에서 일어나기 때문에) 호이스팅이 일어나지 않는다. Class도 호이스팅이 되지 않는다. 실행컨텍스트는 콜스택에 쌓이는 단위이며 처음에는 전역실행컨텍스트, 함수를 호출하면 그 위에 함수 실행컨텍스트가 쌓인다. 이 실행컨텍스트에는 this와 렉시컬환경을 참조하는 스코프가 있고 이 렉시컬환경은 환경레코드를 기록하고 외부 렉시컬 환경을 참조할수있는 영역이다. 스코프 체이닝을 통해서 함수 외부의 영역에도 접근할 수 있는데 이를 Closure라고 한다. 자바스크립트에서는 this가 동적으로 결정된다. 다른 객체지향 언어에서는 this는 항상 정적으로 자신의 인스턴스 주소인데 반해서… this 바인딩은 this와 this가 가리킬 객체를 바인딩 하는 것이다. 일반함수의 this는 window 전역객체, 생성자 함수 메서드의 this는 생성된 인스턴스 객체, 이벤트 리스너의 this는 이벤트 객체, 화살표 함수의 this는 상위 스코프의 this 객체다. 동적 스코프는 함수가 호출되는 시점에 동적으로 상위 스코프를 결정하는것이고, 정적 스코프 또는 렉시컬 스코프는 함수를 어디서 정의 함에 따라 상위 스코프를 결정한다. 화살표 함수의 특징은 생성자 함수로 사용 불가능하다. prototype 객체가 없기 때문이다. 함수 내부 arguments 객체도 없다. this가 자동으로 상위 스코포의 this로 정적 바인딩 된다.

</aside>