자바스크립트 컨텍스트

원시값, 참조값

  • 변수는 원시 값과 참조 값 두 가지 타입을 저장
  • 원시 값: Undefined, Null, Boolean, Number, String, 스택 영역에 저장
  • 참조 값: 메모리에 저장된 객체, 자바스크립트는 메모리에 직접 접근 불가, 힙 영역에 저장

동적 프로퍼티

  • 참조 값을 다룰 때는 언제든지 프로퍼티와 메서드를 조작할 수 있다

값 복사

  • 원시 값을 다른 변수로 복사할 때는 현재 저장된 값을 새로 생성한 다음 새로운 변수에 복사
  • 참조 값을 다른 변수로 복사하면 원래 변수에 들어있던 힙에 저장된 객체를 가리키는 포인터가 복사

힙: 어플리케이션이 운영체제로 부터 미리 할당받는 메모리 (브라우저가 쓰는 메모리)

실행 컨텍스트(execution context)와 스코프(scope)

변수 객체 (variable object)

  • 실행 컨텍스트에는 변수 객체(variable object)가 연결되어 있으며 해당 컨텍스트에서 정의된 모든 변수와 함수는 이 객체에 존재
  • 코드에서 접근할 수 없지만 이면에서 데이터를 다룰 때 사용

전역 컨텍스트(Global Context)

  • 전역변수와 전역함수는 전역 컨텍스트(window)의 프로퍼티 및 메서드로 생성
  • 웹브라우저가 종료될 때까지 유지

    실행 컨텍스트(Execution Context)

  • 실행 컨텍스트가 포함된 코드가 모두 실행될 때 파괴 , 해당 컨텍스트 내부에서 정의된 변수와 함수도 파괴
  • 변수에 할당된 메모리를 언제 해제할 수 있는지 판단하는데 도움

스코프 체인(Scope Chain)

  • 컨텍스트에서 코드를 실행하면 변수 객체에 생성
  • 실행 컨텍스트가 접근할 수 있는 모든 변수와 함수에 순서를 정의
  • 스코프 체인의 앞쪽은 항상 코드가 실행되는 컨텍스트의 변수 객체
  • 컨텍스트가 함수라면 활성화 객체(Activation Object)를 변수 객체로 사용
  • 활성화 객체는 argument 변수 단 하나로 시작 (전역 컨텍스트에서는 존재하지 않음)
  • 변수 객체의 다음 순서는 부모 컨텍스트 그 다음은 부모의 부모 컨텍스트 최종 전역 컨텍스트
  • 전역 컨텍스트의 변수 객체는 항상 스코프 체인의 마지막에 존재
  • 각 컨텍스트는 스코프 체인을 따라 상위 컨텍스트에서 변수나 함수를 검색 반대로는 안됨

블록 레벨 스코프가 없다

  • var를 사용해 선언한 변수는 자동으로 가장 가까운 컨텍스트에 추가
    1
    2
    3
    4
    for(var i=0; i < 10; i++){
    doSomething(i);
    }
    alert(i); //10