프로그래밍 세상/자바스크립트 이야기
제 4장. 변수
초매
2012. 1. 15. 16:41
변수란?
어떤 값과 연관된 이름으로 값을 저장하거나 포함한다. |
1. 변수 타입
변수의 타입 제약이 엄격하지 않다. 값의 타입에 따라 변수의 타입이 변한다. |
2. 변수 선언
var 변수명; // 선언 방식 var 변수명, 변수명; // 여러개의 변수 선언 var 변수명 = "hello"; // 선언과 함께 초기화 방법 |
2.1 변수 선언의 반복과 생략
var 구문으로 같은 이름의 변수를 여러번 선언해도 무방하다. 선언되지 않은 변수의 값을 읽으려할 경우 에러가 발생한다. 단, 암묵적으로 선언되는 변수는 항상 전역 변수로 선언된다. |
3. 변수의 유효 범위
전역 변수의 범위는 전역적이다. 어떤 함수 안에서 선언된 변수는 오직 그 함수 몸체 안에서만 정의된다. = 지역변수 전역변수는 var 를 사용하지 않아도 되지만, 지역변수는 반드시 var 을 이용해서 선언해야 한다. - 변수를 선언할 경우에는 var 를 사용하자. |
3.1 블록 단위의 유효 범위는 없다.
지역변수는 함수 전체에 걸쳐서 정의된다. 즉, 같은 이름의 전역 변수는 함수 전체에서 이 지역 변수에 의해 감춰진다. 어떤 함수에서건 모든 변수의 선언을 함수의 시작부에 두는 것이 좋은 프로그래밍 습관이다. |
3.2 정의되지 않은 변수 vs. 할당되지 않은 변수
'선언되지 않은 변수'를 읽으려 하면 런타임 에러가 발생한다. 할당되지 않은 변수를 읽으려 하면 에러가 발생한다. |
4. 기본타입과 참조 타입
기본 타입 : 숫자, 불리언 값, null, undefined 타입 1) 고정된 크기의 메모리를 차지한다. 참조 타입 : 객체(Object), 배열, 그리고 함수 1) 어떤 크기라도 가질 수 있다. - 크기가 고정되어 있지 않다. |
5. 가비지 컬렉션
참조타입은 크기가 고정되어 있지 않다. 문자열, 객체, 배열등은 크기가 정해져 있지 않다. 따라서 이들을 담기 위한 저장소는 그 크기를 알 수 없는 상태에서 동적으로 할당되어야 한다. 이렇게 동적으로 할당된 메모리는 언젠가는 반드시 해제되어 재활용될 수 있어야 한다. 이렇게 자동으로 메모리를 해제하는 기술이 가비지 컬렉션이다. |
6. 변수와 프로퍼티
자바스크립의 변수는 근본적으로 객체 프로퍼티와 동일하다. |
6.1 전역 객체
자바 스크립트 인터프리터가 구동되면 자바스크립트 코드를 실행 하기 전에 먼저 수행하는 사전 작업들이 있다. 그 중 하나가 바로 전역 객체를 생성하는 일이다. 이 객체의 프로퍼티들은 자바스크립트 프로그램들의 전역 변수들이다. |
6.2 지역변수: 호출 객체
전역 변수들이 특수한 전역 객체들의 프로퍼티에 해당한다면 지역 변수들은 어떨까? 이들 역시 어떤 객체의 프로퍼티에 해당한다. 이 객체를 일컬어 호출 객체(call object)라고 부른다. |
6.3 자바스크립트 실행 컨텍스트
자바스크립트 코드가 실행되고 있는 컨텍스트 컨텍스트: 변수들이 정의되어 있는 객체 자바스크립트는 충분히 유연한 언어이다. 전역 실행 컨텍스트들은 서로 참조하고 참조될 수 있다. |
6.4 변수의 유혀 범위(재해석)
어떤 한수의 정의가 다른 함수 내부에 ㅈ우첩되어 있을 경우, 이 중첩된 함수에서 정의된 변수는 전역 객체의 프로퍼티이며, 지역 변수는 특수한 호출 객체의 프로퍼티이다. 모든 자바스크립트 실행 컨텍스트에는 유효 범위 체인이라는 것이 딸려 있다. 이 유효 범위 체인이란 객체들의 나열(또는 체인)이다. |