호이스팅(variable hoisting)
: 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
console.log(score); // undefined
var score; // 변수 선언문
-> 인터프리터 언어인 자바스크립트는 위에서부터 한 줄씩 순차적으로 실행되는데,
변수 선언은 런타임(runtime) '이전 단계'에 먼저 실행되기 때문에 참조에러가 아닌 undefined가 출력된다 !
자바스크립트 엔진은 소스코드를 한 줄씩 시행하기 전에
'소스코드 평가 과정'을 거치는데 이 때 모든 선언문을 먼저 실행하고,
이후 순차적으로 실행함
var, let, const, function*, class 키워드 사용해서 선언하는 모든 식별자(변수, 함수, 클래스 등)는 호이스팅 됨
값의 할당(assignment)(대입, 저장)
: 변수에 값을 할당 할 때는 할당 연산자 =를 사용함
할당 연산자는 우변의 값을 좌변의 변수에 할당함
var score; //변수 선언
score = 80; //값의 할당
//위와 같이 변수에 값을 할당할 때는
이전 값 undefined가 저장되어 있던 메모리 공간을 지우고
그 메모리 공간에 새롭게 80을 저장하는게 아니라
새로운 메모리 공간을 확보하고 그곳에 할당값 80을 저장한다는 점 주의하기
var score = 80;
// 변수 선언과 값의 할당을 하나의 문장으로 단축 표현 가능
//함께 표현하더라도 변수 선언과 할당은 따로 두 번 이루어지기 때문에
undefined가 할당되어 초기화 되는 것은 변함이 없음
console.log(score);
// 런타임 이전에 변수 선언문만 먼저 실행된 상태니까 초기화 값인 undefined가 출력
score = 80; // 값의 할당 ()
var score; // 변수 선언 (런타임 전 1순위로 실행됨)
console.log(score);
// 변수선언 -> 런타임 실행된 후니까 할당해준 값 80이 출력됨
값의 재할당
: 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것
가비지 콜렉터(garbage collector)
: 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능
상수(constant)
: 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없음
언매니지드 언어 VS 매니지드 언어
- 언매니지드 언어
-개발자가 명시적으로 메모리를 할당하고 해제하기 위해
malloc( )과 free( )같은 저수준 메모리 제어 기능 제공
-장점 : 메모리 제어를 개발자가 주도할 수 있으므로
개발자의 역량에 따라 최적의 성능 확보 가능
-단점 : 반대의 경우 치명적 오류 생산
-대표적 언어 : C언어
- 매니지드 언어
-메모리 할당 및 해제를 위한 메모리 관리 기능을 언어 차원에서 담당
-개발자가 명시적으로 메모리 할당, 해제 불가능
-가비지 콜렉터가 메모리 해제 수행, 개발자 관여 불가
-장점 : 개발자 역량에 의존하는 부분이 상대적으로 작아져 어느 정도 일정한 생산성 확보 가능
-단점 : 성능 면에서 어느 정도 손실 감수해야함
-대표적 언어 : 자바스크립트
식별자 네이밍 규칙
예약어
: 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어
네이밍 컨벤션(naming convention)
: 하나 이상의 영어 단어로 구성된 식별자를 만들 때
가독성 좋게 단어를 한눈에 구분하기 위해 규정한 명명 규칙
var firstName;
var first_name;
var FirstName;
var strFirstName; // type + identifier
var $elem = document.getElementById('myId') // DOM 노드
var observable$ = fromEvent(document,'click'); // RxJS 옵저버블