1
10 + 20
1. 변수
계산(평가evaluate)
기호(리터럴literal, 연산자operator)
식(표현식expression)
해석(파싱parsing)
피연산자operand
변수variable
: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체
또는
그 메모리 공간을 식별하기 위해 붙인 이름
- 변수 이름(변수명)
: 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
★ 변수에 여러 개의 값 저장하는 방법
여러 개의 값을 저장하기 위해선 여러 개의 변수를 사용해야 하지만, 배열이나 객체 등의 자료구조를 통해 여러 개의 값을 그룹화해서 하나의 값처럼 사용 가능.
1
2
3
4
5
6
7
8
9
var userId = 5;
var userName = 'Kim';
var user = { id: 5, name: 'Kim' };
var users = [
{ id: 5, name: 'Kim' },
{ id: 10, name: 'Park' }
]
변수 값
: 변수에 저장된 값할당assignment(대입, 저장)
: 변수에 값을 저장하는 것참조reference : 변수에 저장된 값을 읽어 들이는 것
2. 식별자
- 식별자identifier
- : 어떤 값을 구별해서 식별할 수 있는 고유한 이름
변수 이름을 식별자라고도 한다.
★ 식별자는 값이 아니라 메모리 주소를 기억함.
3. 변수 선언
- 변수 선언variable declaration
- : 변수를 생성하는 것.
값을 저장하기 위한 메모리 공간을 확보allocate,
변수 이름과 확보된 메모리 공간의 주소를 연결name binding해서
값을 저장할 수 있게 준비하는 것.
변수 사용하려면 반드시 선언이 필요함.
변수를 선언할 때는var
,let
,const
키워드를 사용함.
(let
과const
는 ES6에서 도입됨)
3.1. var 키워드로 변수 선언
1
var score;
※키워드keyword
: 자바스크립트 엔진은 키워드를 만나면 자신이 수행해야 할 약속된 동작을 수행한다.
※undefined
: 자바스크립트에서 제공하는 원시 타입의 값primitive value.
변수를 선언하고 값은 할당하지 않았으면, 이 메모리 공간은 비어 있는 것이 아니라
자바스크립트 엔진에 의해 undefined
라는 값이 암묵적으로 할당되어 초기화된다.
※변수 이름이 등록되는 곳
: 변수 이름을 비롯한 모든 식별자는 실행 컨텍스트execution context에 등록됨.
3.2. ReferenceError
(참조 에러)
식별자를 통해 값을 참조하려 했지만, 자바스크립트 엔진이 등록된 식별자를 찾을 수 없을 때 발생.
(선언하지 않은 식별자에 접근 시 발생.)
4. 변수 선언의 실행 시점과 변수 호이스팅
1
2
3
console.log(score);
var score;
1
2
/* 결과 */
undefined
참조 에러가 아닌, undefined
가 출력되는 이유
: 변수 선언이 런타임runtime(소스코드가 한 줄씩 순차 실행되는 시점)이 아니라 그 이전 단계에서 먼저 실행되기 때문.
=> js 엔진은 변수 선언이 어디 있든지 다른 코드보다 먼저 실행함.
이러한 특징을 변수 호이스팅variable hoisting이라 함.
5. 값의 할당
변수에 값 할당assignment할 땐 =
사용.
1
2
var score;
score = 100;
5.1. 변수 선언과 값 할당의 실행 시점
변수 선언과 값의 할당의 실행 시점은 다르다.
즉,
변수 선언: 런타임 이전에 먼저 실행
값의 할당: 런타임에 실행
6. 값의 재할당
var
키워드로 선언한 변수는 값 재할당 가능.
6.1. const 키워드
const
키워드로 선언한 변수는 재할당 금지됨.
즉, const
키워드는 단 한 번만 할당 가능한 변수를 선언함.
1
2
const val = 100;
val = 50;
1
2
3
4
foo = 100;
^
TypeError: Assignment to constant variable.
6.2. 가비지 콜렉터garbage collector
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여
더 이상 사용되지 않는 메모리를 해제release하는 기능.
가비지 콜렉터를 통해 메모리 누수memory leak 방지함.
7. 식별자 네이밍 규칙
식별자identifier
: 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름
- 식별자는 특수문자 제외한 문자, 숫자, 언더스코어(_
), 달러 기호($
)를 포함 가능
- 식별자는 특수문자 제외한 문자, 숫자, 언더스코어(_
), 달러 기호($
)로 시작해야 함. 숫자로 시작은 허용되지 않음.
- 예약어reserved word는 사용 불가.
7.1. 대소문자 구별
1
2
3
var thisisval = 10;
var thisisVal = 20;
var THISISVAL = 30;
1
2
3
10
20
30
7.2. 네이밍 컨벤션naming convention
1
2
3
4
5
6
7
8
9
10
11
// camelCase
var thisisVal;
// snake_case
var thisis_val;
// pascalCase
var ThisisVal;
// typeHungarianCase
var strThisisVal;