23장. 실행컨텍스트
소스코드 4가지 타입
-전역 코드
-함수 코드
-eval 코드(빌트인 전역함수)
-모듈 코드
→ 과정과 관리 내용이 다름
1.
소스코드 평가 과정
•
컨텍스트 생성
•
선언문만 실행해 생성된 변수/함수의 식별자를 키로 스코프에 등록
•
( + undefined로 초기화, arguments 객체 생성, this 바인딩 )
2.
소스코드 실행 과정 (런타임)
•
스코프 등록 확인
•
값 할당, 할당 결과를 실행 컨텍스트에 등록
실행 컨텍스트
소스코드를 실행하는데 필요한 환경을 제공하고,
코드의 실행결과를 실제로 관리하는 영역
•
식별자 등록 및 스코프 ← “렉시컬 환경”
•
코드 실행 순서 관리 ← “실행 컨텍스트 스택”
(그림)
(그림)
동작
1. 실행 컨텍스트 생성
2.
렉시컬 환경
a.
환경 레코드
b.
(this 바인딩)
c.
외부환경 렉시컬 어쩌고
3.
완료 후 스택에 푸시
!! 실행 컨텍스트 스택에서 실행 컨텍스트가 제거되었다고 해서 렉시컬 환경까지 즉시 소멸하는 것 아님 (독립적 개체) → 누가 참조하고 있으면 살아있음
(가비지 컬렉션, 메모리 누수, 참조 카운팅 기억나시져 ~?)
24장. 클로저
(자스 고유 개념 x, 함수형 프로그래밍 언어에 중요 특성)
객체 지향 프로그래밍 언어의 클래스는 접근자 사용
클로저
클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
•
중첩 함수가 상위 스코프의 식별자를 참조하고
•
외부함수보다 중첩함수가 더 오래 유지되는 경우
⇒ 중첩 함수는 이미 생명주기가 종료한 외부 함수의 변수를 참조 가능하다
이때 중첩함수를 클로저라고 한다
== “함수가 자유변수에 대해 닫혀있다”
== “자유변수에 묶여있는 함수”
(브라우저) 최적화 : 참조하고 있는 식별자(자유변수)만 기억함
렉시컬 스코프
함수를 어디에 “정의”(호출x) 했는지에 따라 상위 스코프를 결정
= 정적 스코프
(실행 컨텍스트의 렉시컬 환경이 스코프의 실체다 !)
캡슐화
객체의 상태를 나타내는 프로퍼티와 프로퍼티를 참조하고 조작할 수 있는 동작인 메서드를 하나로 묶은 것
정보 은닉
캡슐화를 객체의 특정 프로퍼티나 메서드를 감출 목적으로 사용하는 것
this.변수명 // public
let _변수명 // private
JavaScript
복사
25장. 클래스
= 문법적 설탕
클래스도 사실 “함수”임
•
class 키워드 + 파스칼 케이스
•
생성자(constructor) / 프로토타입 메서드 / 정적 메서드(static)
◦
메서드 축약 표현 (funciton 키워드 생략)
•
인스턴스 - new 키워드
•
확장(상속) - extends 키워드, super 키워드
(클래스뿐만 아니라 생성자 함수도 extends 가능)
◦
부모 / 베이스 / 수퍼 클래스
자식 / 파생 / 서브 클래스