1. 변수란 무엇인가?
2. 식별자
- 식별자(identifier)
- 어떤 값을 구별해서 식별할 수 있는 고유한 이름.
- 값이 아니라 메모리 주소에 붙인 이름.
3. 변수 선언(variable declaration)
- 변수를 생성하는 것
값을 저장하기 위해 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연ㄴ결해서 값을 저장할 수 있게 준비하는 것
- 단계
- 선언 단계: 변수 이름을 등록해서 엔진에 변수의 존재를 알림
- 초기화 단계: 초기화란, 변수가 선언된 이후 최초로 값을 할당하는 것을 말함. 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화함 초기화 단계를 거치지 않으면 확보된 메모리 공간에 다른 어플리케이션에서 사용했던 값(쓰레기 값 garbage value)이 남아 있을 수 있고, 변수 값을 참조하면 쓰레기 값이 나올 수 있음.
💡 초기화 이슈 :
초기화를 reset으로 생각하냐, Initialization으로 생각하냐의 차이는 아닐까.
Initialization이란
In [computer programming](https://en.wikipedia.org/wiki/Computer_programming), **initialization** (or initialisation) is the [assignment](https://en.wikipedia.org/wiki/Assignment_(computer_science)) of an initial value for a [data object](https://en.wikipedia.org/wiki/Data_object) or variable.
컴퓨터 프로그래밍에서 초기화는 데이터 오브젝트나 변수의 초기 값 할당을 의미한다.
- 실행 컨텍스트(execution context)
- 엔진이 소스코드를 평가하고 실행하기 위한 환경 제공
- 코드의 실행 결과를 실제로 관리하는 영역
- 변수 이름과 변수 값은 실행 컨텍스트 내에 키(key), 값(value)형식인 객체로 등록되어 관리.
- var 키워드의 단점
- 블록 레벨 스코프를 지원하지 않고 함수레벨 스코프를 지원해서 의도하지 않은 전역변수가 선언됨.
- 키워드란, 자바스크립트 엔진이 수행할 동작을 규정한 일종의 명령어
- ReferenceError(참조 에러)
-
식별자를 통해 값을 참조하려했지만 엔진이 등록된 식별자를 찾을 수 없을 때 발생하는 에러
const person {
"name" : "minsu",
"age" : 21
}
console.log(person.last-name);
4. 변수 선언의 실행 시점과 변수 호이스팅
- 코드 실행 단계
- 0.소스코드의 평가과정: 변수선언문을 포함한 모든 선언문을 찾아냄
- 런타임: 자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행
- 변수 호이스팅(variable hoisting): 변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작
console.log(score);
var score;
5. 값의 할당
- 변수에 값을 할당(대입,저장)할 때 할당 연산자'='를 사용
var score;
score = 80;
- 변수 선언과 값의 할당을 하나의 문으로 단축 표현 가능
var score = 88;
console.log(score);
var score = 80;
console.log(score)
6. 값의 재할당
- 변수에 값을 할당할 때 undefined가 저장되어있떤 메모리 공간을 지우고 할당 값 80을 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 할당 값 80을 저장
- 상수: 단 한 번만 할당할 수 있는 변수
- 변수: 재할당을 통해 저장된 값을 다른 값으로 변경가능
var score;
score = 80;
score = 90;
7. 식별자 네이밍 규칙
- 식별자: 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름
- 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함할 수 있음
- 단, 숫자로 시작하는 것은 허용하지 않음.
- 대소문자를 구분함 (firstname ≠ firstName)
- 예약어는 식별자로 사용할 수 있음
- 예약어: 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어(break,continue,this 등)
var first-name
var 1st;
var this;