Javascript - 변수

김태수·2021년 6월 21일
0

기타

목록 보기
4/11

변수의 선언문

ES6 이전의 javascript 변수 선언에는
유일하게 var 키워드 만을 사용할 수 있었으나, ES6(ECMAscript2015)
이후의 자바스크립트는 letconst의 키워드를 추가적으로 갖게 됨


ES6등장 이후 변수 선언에서의 var는 권고되지 않고 있으며,
변수의 선언으로 let 상수의 선언으로 const를 사용하는 추세.

var

ES6이전 변수를 선언하던 방식인 var를 사용했을 때 대표적인 단점은 다음과 같다.

  • hoisting
    var키워드는 순차적으로 실행되는 자바스크립트 환경에서, 다음과 같이
    예상치 못한 결과를 초래한다. var키워드는 자바스크립트가 돌아가는 런타임 이전에
    실행되기 때문.
console.log(foo) //undefined
var foo = 'bar';
  • function level scope
    var키워드는 블록 단위를 가지는 다른 선언 키워드와는 다르게
    함수 단위의 범위를 갖게 된다.
{
  var bar = 'foo';
}
console.log(bar) //'foo'

값의 할당

let foo = 'bar';

다음과 같은 변수의 선언식은 두가지 동작을 연속적으로 하게 되며, 그 동작은 다음과 같다.

let foo;
foo = 'bar';

let foo = 'bar'; 와 같은 동작을 수행할 때 자바스크립트는 식별자 foo의 메모리 공간을 먼저 확보 후, 해당값에 undefined를 할당하게 된다. 그 후, 'bar'를 재할당 하게 된다.

let bar;
console.log(bar) // undefined

변수에 어떠한 값을 할당하지 않는다 해도, 자바스크립트는 자동으로 해당 변수에 undefined를 할당한다.

값의 재 할당

자바스크립트에서의 변수에 데이터를 재할당 하는 작업은, 해당 메모리 공간을 지우고, 그 메모리 공간에 재할당 값을 저장하는 것이 아닌, 새로운 메모리 공간을 확보 후 그 메모리에 재할당하는 데이터를 기록후 식별자, 즉 변수의 이름을 새로 할당 해 준다.

가비지 콜렉터

위와 같이 값의 재할당이 일어날 때, 식별자(변수 이름)이 사라져 더이상 접근할 수 없는 데이터가 남게 되는데, 이 데이터의 경우 무한정 메모리에 쌓이는 것이 아닌 가비지 컬렉터 (garbage collector)에 의해 자동으로 메모리에서 해제 된다.
해당 가비지 컬렉터가 런타임의 어느 시점에 동작 하는지는 알 수 없다.
단순한 변수 뿐만 아니라, 외부에서 더이상 접근할 수 없게된 데이터는 모두
가비지 컬렉터에 의해 제거되어, 메모리 누수를 방지한다.

  • 가비지 컬렉션은 엔진이 자동으로 수행하므로 개발자는 이를 억지로 실행하거나 막을 수 없다.
  • 각 자바스크립트 엔진마다, 가비지 컬렉터의 알고리즘과 작동 방식이 상이하다.
profile
개발학습 일기

0개의 댓글