본 내용은 책 모던 자바스크립트 Deep Dive 의 내용을 참조했습니다.
변수는 하나의 값을 저장하기 위해 메모리 를 초기화 하고 식별할수 있는 역할을 한다.
변수를 식별자(identifier) 라고도 부르며 무언가를 식별할수 있는 고유의 이름을 뜻한다
식별자는 어떠한 메모리의 값 을 기억하는게 아니라 주소를 기억한다
식별자
-> 메모리주소
-> 메모리값
자바스크립트에서는 함수도 값이기 때문에 변수
함수
클래스
모두 식별자라고 부른다.
변수를 선언하면 실행컨텍스트에 등록이 된다.
변수 함수 클래스 같은 모든 식별자들은 런타임
전에 실행된다.
가장 상단으로 올려서 실행하는 행위를 호이스팅(hoisting) 이라고 한다.
var score = 80;
선언과 할당을 동시에 하는 코드는 사실 아래와 같은 코드다
var score;
score = 80;
즉 런타임 전에 score 에 undefined
가 할당이 되고
런타임 때 위에서부터 한줄씩, 차례가 되었을때 80이할당 된다.
var score = 80;
score = 90 ;
위와같은 코드가 선언되었을때 undefined , 80 , 90
총 3번이 할당이 되는데.. 메모리에선 하나의 메모리를 지우고 다시 쓰는게 아니라
할당이 될때마다
새 메모리에 값을 할당하고 연결한다.
연결이 끊겨버린 값들은 자바스크립트 자체 엔진 가비지 콜렉터
에서 자동으로 삭제한다.
C언어 에서는 malloc() , free() 같은 함수로 개발자가 직접 메모리 직접 관리할수 있지만
자바스크립트는 자동으로 한다.
이렇게 스스로 컨트롤 하는 언어를 매니지드 언어
, 아닌 언어를 언매니지드 언어
라고 한다.
식별자에서는 다음과 같은 규칙이 있다.
변수
함수
에는 카멜케이스
생성자 함수
클래스
에는 파스칼케이스를 사용한다.
값
이란 식
이 평가
되어 생성된 결과를 말한다.
var sum;
sum = 10 + 20;
10 + 20(식) 이 평가 되어서 30이란 값이 나온다.
사람이 이해할수 있는 문자 또는 약속된 기호를 사용해 값을 만드는 표기법이다.
예를들어 'hello' 는 문자 리터럴이다. 숫자 5 는 정수리터럴이다.
자바스크립트에는 많은 리터럴들이 있고 리터럴은 런타임때 값으로 평가되어 반환된다.
값으로 평가될수 있는 문 이다.
개발자 도구에서 값을 반환하는것은 표현식인 문이고
undefined 를 반환하는것은 표현식이 아닌 문이다.