본문 바로가기

프로그래밍 세상/자바스크립트 이야기

제 4장. 변수


변수란?
 어떤 값과 연관된 이름으로 값을 저장하거나 포함한다.

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 변수의 유혀 범위(재해석)
어떤 한수의 정의가 다른 함수 내부에 ㅈ우첩되어 있을 경우, 이 중첩된 함수에서 정의된 변수는
전역 객체의 프로퍼티이며, 지역 변수는 특수한 호출 객체의 프로퍼티이다.
모든 자바스크립트 실행 컨텍스트에는 유효 범위 체인이라는 것이 딸려 있다.
이 유효 범위 체인이란 객체들의 나열(또는 체인)이다.