코드가 실행되는 환경으로 실행되는 코드에 대한 정보와 함께 변수, 함수 및 객체에 대한 액세스 권한을 제공
context는 call stack(호출 스택)이라는 데이터 구조로 관리된다
-- 현재 실행 중인 context를 저장하는 stack 구조
-- 함수가 호출될 때마다 새로운 context가 stack에 추가 -> 함수 호출
-- 함수 실행이 끝나면 해당 context가 stack에서 제거 -> 함수 반환
context 원칙 4가지
-- 전역 context 하나 생성 후, 함수 호출 시마다 컨텍스트가 생긴다
-- context 생성 시 context안에 변수객체(arguments, variable), scope chain, this 생성
-- context 생성 후 함수가 실행될 때 변수들은 변수 객체 안에서 값을 찾고, 없으면 scope chain을 따라 올라가며 찾는다
-- 함수 실행이 마무리되면 해당 context는 사라짐
-- 페이지가 종료되면 전역 context가 사라짐
this
-- 현재 실행되고 있는 코드의 context를 가리키는 키워드
-- 코드의 실행 context의 따라 참조하는 값이 달라진다
- 일반 함수 호출 'this' = 전역 객체(global object)
- 메서드 호출 'this' = 객체의 메서드 내부에서의 해당 객체
- 생성자 함수 호출 'this' = 생성자 함수 내부에서 새로 생성된 객체
-- 함수의 scope는 코드의 구조에 의해서 결정되지만, 'this'는 코드가 호출되는 방식에 따라 동적으로 바뀔 수 있다