변수
하나의 값을 저장할 수 있는 메모리 공간에 붙인 이름 또는 메모리 공간 자체
즉 값에 이름을 붙인 것.
할당, 대입, 저장 = 변수에 값을 저장 하는것
참조 = 변수에 저장된 값을 읽어 들이는 것
식별자 = 변수 이름을 포괄하는 개념 : 어떤 값을 구별하여 식별해낼 수 있는 이름
변수 선언 : 변수를 생성하는 것
변수 이름을 자바스크립트 엔진에 알려 등록하고 변수값을 저장하기 위한 메모리 영역의 확보를 명령하는 것
변수 선언을 통해 자바스크립트 엔진은 등록된 변수 이름과 변수 값을 저장하기 위한 메모리 영역을 연결해 변수를 지속적으로 관리
변수 이름은 실행컨텍스트에 등록!
실행 컨텍스트는 자바스크립트 엔진이 실행 가능한 코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행결과를 실제로 관리하는 영역.
자바스크립트 엔진은 변수 선언을 2단계로 수행
1단계 : 선언 단계 , 변수 이름을 등록하여 자바스크립트 엔진에 변수의 존재를 알린다.
2단계 : 초기화 단계, 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당한다.
**변수 이름 등록 : 모든 식별자는 실행 컨텍스트의 렉시컬 환경에 등록, 자바스크립트 엔진은 실행 컨텍스트를 통해 식별자와 스코프를 관리한다.
**ReferenceError는 식별자를 통해 값을 참조하려 했지만 자바스크립트 엔진이 등록된 식별자를 찾을 수 없을 때 발생하는 참조 에러이다.
변수 선언은 소스 코드가 순차적으로 한 줄씩 실행되는 시점, 즉 런타임이 아니라 그 이전 단계인 구문 분석 단계에 먼저 실행된다.
자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기 이전에 먼저 소스 코드 전체를 평가한다.
이때 모든 선언문을 찾아내어 식별자를 등록하고 초기화한다. 그후 선언문을 제외한 소스 코드를 한줄씩 순차적으로 실행한다.
변수 호이스팅 : 변수 선언문이 코드의 선두르 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
**모든 선언문은 런타임 이전인 구문 분석 단계에 먼저 실행되기 때문에 다른 호이스팅도 발생한다.
console.log(score); // undefined
score = 80; // 값의 할당
var score; // 변수 선언
console.log(score); // ??
선언문인 var scroe를 먼저 찾아서 식별자를 등록하고 초기화를 한다음에 할당이 이루어져서 값이 80이 나온다.
재할당을 할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수라 부른다.
변수나 함수 이름은 카멜케이스 / 생성자 함수, 클래스 이름은 파스칼 케이스
데이터 타입
데이터 타입이 필요한 이유?
1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2. 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
3. 메모리에서 읽어 들인 2진수를 어떻게 해석할 지 결정하기 위해
값 : 더 이상 평가할 수 없는 하나의 표현식
표현식 : 값을 생성하는 문
10 + 20 은 표현식
자바스크립트 엔진에 의해 평가 되어 30이라는 새로운 값 생성
리터럴 : 사람이 이해할 수 있는 표기법으로 값의 생성을 자바스크립트 엔진에게 명령하는 것
var score = 50 + 50 ;
50이라는 리터럴 2개가 합쳐져 새로운 값인 100을 만들지만 이 100이 리터럴은 아니다.
데이터 타입의 종류
원시타입
1. 숫자타입
2. 문자열 타입
3. 불리언 타입
4. undefined 타입
5. null 타입
6. symbol 타입
객체 타입
객체, 함수, 배열 등
선언과 정의
자바스크립트의 경우 변수를 선언하면 정의가 이루어지기 때문에 선언과 정의의 구분이 모호함
자바스크립트에서 선언은 식별자가 생성되었지만 값이 아직 할당되지 않은 상태
자바스크립트에서 정의는 식졀자가 생성되었고 값까지 할당되어 있는 상태
자바스크립트 변수는 선언이 아닌 할당에 의해 타입이 결정 된다.
그리고 재할당에 의해 변수의 타입은 언제든디 동적으로 변할 수 있다
=> 동적 타이핑 언어라고 부른다.
=> 유연성은 높지만, 신뢰성은 떨어진다.
변수 사용시 주의사항
- 변수의 사용을 적극적으로 줄인다. 변수의 개수가 많으면 오류 발생률이 증가한다.
- 전역변수는 사용하지 않는다. 변수의 생명주기를 최대한 짧게 만든다.
- 변수보다는 상수를 사용해 값의 변경을 억제한다.
- 변수 이름은 변수의 존재 이유를 파악할 수 있도록 명명한다.
'패스트캠퍼스 > 자습' 카테고리의 다른 글
poiemaweb 6~7강 정리 (0) | 2019.09.07 |
---|---|
리액트 예습 6~10강 (0) | 2019.09.05 |
리액트 예습 1~5강 (0) | 2019.09.04 |
poiemaweb복습 1~3강 (0) | 2019.09.03 |
React 공부하자 (1) (0) | 2019.08.21 |