티스토리 뷰
공부합시다! 웹 프론트 엔드 개발자들 화이팅!
각 컨텍스트에는 변수 객체(해당 컨텍스트에서 정의된 모든 변수와 함수)가 연결되어 있다.
전역 컨텍스트 = 가장 바깥 컨텍스트 (웹 브라우저에서 window)
컨텍스트는 포함된 코드가 모두 실행됐을때 변수 객체와 함께 없어진다. 전역 컨텍스트는 앱 종료시에 끝난다.
함수를 호출하면 실행 컨텍스트가 생성되고 컨텍스트 스택에 쌓인다.
함수가 끝나면 해당 컨텍스트를 스택에서 꺼내고 컨트롤을 이전 컨텍스트에 반환한다.
함수의 매개변수도 변수 객체와 동일하게 간주된다.
컨텍스트에서 코드를 실행하면 스코프 체인이 만들어 진다.
스코프 체인의 목적은 실행 컨텍스트가 접근할 수 있는 변수 객체에 순서를 정의하는 것이다.
스코프 체인의 앞쪽은 항상 실행 컨텍스트의 변수 객체이다. (함수 컨텍스트라면 활성화 객체(:항상 arguments 변수 단 하나로 시작하고 전역 컨텍스트에 존재하지 않는)를 변수 객체로 사용한다)
변수객체의 다음 순서는 부모 컨텍스트이며 그다음은 조부모 다음다음.. 전역 컨텍스트에 도달해 전역 컨텍스트의 객체는 스코프 체인의 마지막에 존재한다.
식별자는 스코프 체인 순서를 따라가며 검색하고 없다면 에러가 발생한다.
컨텍스트는 스코프 체인을 통해 외부 컨택스트 전체에 접근 가능하지만 반대로는 안된다.
catch문, with문으로 스코프 체인을 확장할 수 있고 스코프 체인 앞부분에 임시 변수객체가 만들어진다.
블록 레벨 스코프가 없어서 if문, for문 에서 선언한 변수는 if문, for문이 끝나도 존재한다.
var 키워드를 사용해 변수를 선언하면 가장 가까운 컨텍스트에. 키워드 없이 선언하면 전역컨텍스트에 생성된다. (strict 모드에서 에러)
식별자를 찾으면 검색을 멈추기 때문에 상위 컨텍스트에 같은 이름의 식별자는 참조하지 못한다.
당연히 변수 검색에도 비용이 들어가니 전역변수보다 지역변수가 더 빨리 검색된다. 하지만 자바스크립트 엔진에서 최적화를 하므로 점점 그 차이는 좁아지고 있다.
'웹 > 자바스크립트' 카테고리의 다른 글
| 가비지 콜렉션 (garbage collection) (0) | 2020.02.23 |
|---|---|
| 배열의 값을 오름차순으로 바꾸기 (sort) (0) | 2017.04.18 |
| 문자열 뒤집기 (split, reverse, join) (0) | 2017.04.18 |
