Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

변수(Variable) 본문

Programming Language/JavaScript

변수(Variable)

scarecrow1992 2020. 11. 14. 18:42

식별자(Identifier)

  • 변수나 함수, 클래스 등을 구별해서 식별할 수 있는 고유한 이름.
  • 값이 아니라 메모리 주소를 기억한다.
  • 즉, 메모리상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자라고 부른다.

 


변수 선언(Variable Declaration)

  • 변수를 생성하는것
  • var, let, const 키워드를 사용한다.
var score;
  • JS engine은 변수선언을 다음처럼 2단계에 걸쳐 수행한다.
    1. 선언 단계 : 변수 이름을 등록해서 JS engine에 변수의 존재를 알린다.
    2. 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 한다.
  • var 키워드를 통한 변수 선언은 선언 단계와 초기화 단계가 동시에 진행된다.
  • 초기화 단계를 거치지 않으면 메모리공간에는 이전에 사용했던 값이 남아 있을 수 있다.
    • 이런 값을 쓰레기 값(garbage value)라 한다.
  • 선언하지 않은 식별자에 접근하면 ReferenceError가 발생한다.
    • JS engine에 등록된 식별자를 찾을 수 없을때 발생하는 에러

 


실행 컨텍스트(execution context)

  • 변수 이름을 비롯한 모든 식별자가 저장되는 공간.
  • JS engine이 여러 가지 작업을 진행하는 공간.
    • 실행을 위한 환경 제공
    • 소스코드를 평가
    • 실행 결과를 관리
    • 식별자와 스코프를 관리

이는 추후에 더 살펴볼 예정이다.

지금은 단순히 JS engine이 변수를 관리할 수 있도록 변수의 존재를 알린다는 정도로만 기억

 


호이스팅(hoisting)

  • var, let, const, function, cunftion*, class 등의 키워드를 사용해서 선언하는 모든 식별자는 JS Engine에 의한 사전 평가에 의해 선언문이 선두로 끌어올려진것처럼 동작하는 JS 고유의 특징을 hoisting이라 한다.
    • JS engine는 소스코드를 한 줄씩 순차적으로 실행하기에 앞서 먼저 소스코드 평과가정을 거치면서 소스코드실행을 위한 준비를 한다.
    • 이 평가과정에서 JS engine는 변수 선언을 포함한 모든 선언문을 소스코드에서 찾아내 먼저 실행한다.
    • 평가과정이 끝나면 선언문을 제외한 소스코드를 한 줄씩 순차적으로 실행한다.
    • 즉, 변수선언은 소스코드의 어디에 위치하든 상관 없이 어디서든지 변수를 참조할 수 있다.
console.log(score);
var score;
  • 위 코드에서 변수 score는 log 함수 이후에 선언되었지만 JS engine가 평가과정에서 함수사용이전에 선언하였으므로 에러 없이 실행된다.
식별자선언은 소스 코드가 한줄씩 순차적으로 실행되는 runtime이 아니라 그 이전의 평가 단계에서 먼저 실행된다.

 

변수호이스팅을 시행할때에 사전평가에 의해 만들어 지는것은 변수 선언 자체뿐이다. 할당문은 런타임시에 해당 코드가 실행되는 시점에 실행되어 변수에 값이 저장된다.

1
2
3
console.log(x);     // undefined
var x = 'hello';
console.log(x);     // hello
cs

가령 위 코드는 변수 x의 선언과 함께 hello 문자열로 초기화 하지만, 첫번째 출력에서는 x가 undefined초기화 되어 있게 되지만, 2번줄에서 변수 x에 hello 문자열의 저장이 이루어진다.

변수 호이스팅에 의해 변수가 사전에 생성되더라도 실제 값은 해당 대입문이 실행되는 시점에 저장된다.

 

 


할당(assignment)

  • 변수에 값을 대입 및 저장하는 행위를 할당이라 한다.
//선언과 할당을 따로 할 경우
var score;
score = 80;

//선언과 할당을 하나의 문(statement)로 단축할 경우
var score = 80;
  • 변수 선언과 달리 할당은 런타임시에 순차적으로 실행된다.

 

console.log(score);	//undefined

var score;
score = 80;

console.log(score);	//80
  • 순차적으로 undefined와 80이 출력된다.

 

console.log(score);     //undefined

score = 80;
var score;

console.log(score);     //80
  • var로 변수를 선언하면 선언과 초기화가 동시에 이루어져 undefined가 할당된다.
  • 위 코드에서 80으로 할당 하고 한번더 선언을 했지만, 런타임시에는 선언문이 실행되지 않으므로 80이 출력된다. 

 

 

'Programming Language > JavaScript' 카테고리의 다른 글

객체 리터럴  (0) 2020.11.15
비교 연산자(Comparison Operator)  (0) 2020.11.15
데이터 타입(Data Type)  (0) 2020.11.14
표현식과 문(expression and statement)  (0) 2020.11.14
자바스크립트란?  (0) 2020.11.13
Comments