메모리
: 데이터를 저장할 수 있는 메모리 셀의 집합체
변수(variable)
: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체
또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다
변수에 여러개 값 저장하는 방법
-> 배열, 객체 같은 자료구조 사용하면
관련이 있는 여러 개의 값을 그룹화해서 하나의 값처럼 사용 가능
// 변수는 하나의 값을 저장하기 위한 수단
var userId = 1;
var userName = 'been';
// 객체나 배열 같은 자료구조 활용하면 여러개 값 그룹화 가능
var user = { id: 1, name: 'been' };
var users = [
{ id: 1, name: 'been'},
{ id: 1, name: 'Lee'}
];
// 10 + 20은 새로운 값 30을 생성하고, 그 값을 다시 읽어 들여 재사용할 수 있도록 값이 저장된 메모리 공간에 상징적인 이름을 붙인 것이 변수 !
var result = 10 + 20;
변수 이름 : 메모리 공간에 저장된 값을 식별할 수 있는
고유한 이름
// 위 예제에서 result
변수 값 : 변수에 저장된 값
// 위 예제에서 30
할당(assignment)(대입,저장) : 변수에 값을 저장하는 것
참조(reference) : 변수에 저장된 값을 읽어 들이는 것
// 변수 이름 사용해 참조 요청하면 JS엔진이 변수 이름과 매핑된 메모리 주소를 통해 메모리 공간에 접근해서 저장한 값을 반환함
식별자(identifier)
: 어떤 값을 구별해서 식별할 수 있는 고유한 이름
= 메모리 주소에 붙인 이름
식별자는 값이 저장되어 있는 메모리 주소와 매핑 관계를 맺으며,
이 매핑 정보도 메모리에 저장되어야 함
식별자는 값이 아니라 '메모리 주소'를 기억하고 있음
변수 이름, 변수, 함수, 클래스 등의 이름은 모두 식별자 !
메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자
선언에 의해 자바스크립트 엔진에 식별자의 존재를 알림
변수 선언(variable declaration)
: 변수를 생성하는 것
값 저장 위한 메모리 공간 확보 후,
변수 이름과 메모리 공간의 주소 연결해서 값을 저장할 수 있게 준비하는 것
변수 사용하려면 반드시 선언 필요
var, let, const 키워드 사용
// var 키워드의 단점
: 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프만 지원함
따라서 전역 변수가 선언되어 심각한 부작용 발생
var 말고 다른 키워드 사용 추천
var score; // 변수 선언(변수 선언문)
-> score 변수 이름을 등록하고 값을 저장할 메모리 공간 확보함
이때, 확보된 메모리 공간에는 undefined값이 암묵적 할당되어 초기화 됨
undefined : JS에서 제공하는 원시타입의 값(primitive value)
JS엔진의 변수 선언 단계
var 키워드
: 선언 단계와 초기화 단계가 동시에 진행됨
어떠한 값도 할당하지 않아도 undefined라는 값을 갖는다
ReferenceError(참조에러)
: 선언하지 않은 식별자에 접근하면 발생하는 에러
//var는 초기화가 동시에 진행되기 때문에 발생하지 않음