모던 Javascript Deep Dive

Javascript Deep Dive 4장 변수

xxvigrufv 2023. 10. 31. 23:34
반응형

4장 변수


4.1 변수란 무엇인가?

⊙ 변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이다.

⊙ 컴퓨터는 메모리를 사용하여 데이터를 기억합니다. 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체이다.

⊙ 메모리 셀 하나의 크기는 1byte = 8bit 이다.

⊙ 각 셀은 고유의 메모리 주소를 가지고 있다.

⊙ 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 도는 그 메모리 공간을 식별하기 위해 붙인 이름을 뜻한다. ⊙ 데이터 값의 위치를 가리키는 상징적인 이름이다.

⊙ 변수에 값을 저장하는 것을 할당이라 하고, 변수에 저장된 값을 이용하거나 읽는 것을 '참조'라 한다.


4.2 식별자

⊙ 변수의 이름은 식별자라고 한다.

⊙ 즉, 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.

⊙ 식별자는 값이 아니라 메모리 주소를 기억하고 있다.


4.3 변수 선언

⊙ 변수 선언 이란 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비한다.

⊙ 변수를 사용하려면 반드시 선언이 필요한데, 변수를 선언할 때는 var, let, const 키워드를 사용한다.

⊙ ES6 에서 let, const 키워드가 도입되기 이전까지는 var 키워드 가 유일한 키워드였다.

⊙ 변수를 선언한 이후에, 아직 변수에 값을 할당하지 않았다면, 확보된 메모리 공간에는 자바스크립트 엔진에 의하여 undefined 라는 값이 암묵적으로 할당되어 초기화된다.

 

자바스크립트 변순 선언 절차

(1) 선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.

(2) 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 한다.


4.4 변수 선언의 실행 시점과 변수 호이스팅

⊙ 자바스크립트 코드는 인터프리터에 의해 한줄 씩 순차적으로 실행 된다.

⊙ 변수가 선언 되기 전에, 참조가 먼저 발생하였다면, 참조에러가 발생하지 않고 undefined가 출력된다.

⊙ 변수 선언이 소스코드가 한 줄 씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.


4.5 값의 할당

⊙ 변수에 값을 할당할 때는 할당 연산자 = 을 사용한다.

⊙ 할당 연산자는 우변의 값을 좌변의 변수에 할당한다.

var score; //변수 선언
score = 80; //값의 할당
var score = 80; //변수 선언과 값의 할당 단축표현
 

질문

score = 80;
var score;
console.log(score); // 왜 80이 출력 되는가(?)

 

 

4.6 값의 재할당

var score = 80; //변수 선언과 값의 할당
score = 90; // 값의 재할당
 

⊙ var 키워드로 선언한 변수는 재할당할 수 있다.

⊙ 재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것이다.

⊙ var 키워드로 선언한 변수는 선언과 동시에 udefined 로 초기화 되기 대문에 엄밀히 말하면 변수에 처음으로 값을 할당하는 것도 사실은 재할당이라 할 수 있다.

⊙ 변수에 저장된 값을 재할당 할 수 없다면, 변수가 아니라 상수라 한다. 상수는 한번 정해지면 변하지 않는 값이다.

⊙ 그것이 바로 const 키워드를 사용한 변수이다.

 const 키워드를 사용하게 되면 처음 한번만 할당할 수 있다.

※ 재할당은 값을 새로 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그 메모리 공간에 값을 저장한다.


4.7 식별자 네이밍 규칙

⊙ 식별자 : 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름.

※ 네이밍 규칙

  • 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어_, 달러($) 를 포함할 수 있다.
  • 단, 식별자는 특수문자를 제외한 문자, 언더스코어_, 달러($)로 시작해야 한다. 숫자로 시작할 수 없다.
  • 예약어는 식별자로 사용할 수 없다.

예약어

예약어는 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어를 말한다.

  • 자바스크립트 예약어

abstract arguments boolean break byte case
catch char
class*
const continue
debugger
default delete
do double
else
enum* eval export* extends*
false final finally float for function
goto
if
implements import* in
instanceof
int interface let long
native
new null package private protected public
return short static
super*
switch
synchronized this
throw throws
transient true try typeof
var void
volatile while with
yield // *는 ES6에서 추가된 예약어

반응형