개발/JavaScript

[JavaScript] 변수 선언 var / let / const 차이

Monsh 2021. 11. 18. 20:51
반응형

var

function-scoped 변수 또는 전역변수로 선언할 때 사용한다.

var x = 1;

if (x === 1) {
  var x = 2;

  console.log(x);
  // expected output: 2
}

console.log(x);
// expected output: 2

 

var 선언의 범위가 function-scoped이면서 전역이기 때문에,
첫 번째 줄에 x와 네 번째 줄에 x가 같은 것으로 취급되었다.

hoisting

var 선언은 어디에 있든지, 어떤 코드가 실행되기 전에 처리된다. 이를 hoisting이라고 한다.

이는 즉슨, 선언하려고 하는 변수를 무려 선언하는 코드보다 위에서도 사용할 수 있다.

bla = 2;
var bla;

위와 같이 사용이 가능하다.


let

block-scoped 변수를 선언할 때 사용한다. 따라서, 이를 이용하면 private 개념을 구현할 수 있다.

let x = 1;

if (x === 1) {
  let x = 2;

  console.log(x);
  // expected output: 2
}

console.log(x);
// expected output: 1

let 선언의 범위는 block-scoped이므로, if문 내부에 선언된 x와 if문 외부에 선언된 x는 엄연히 서로 다른 변수이다.

 

let x = 1;
switch(x) {
  case 0:
    let foo;
    break;

  case 1:
    let foo; // SyntaxError for redeclaration.
    break;
}

같은 블럭에서는 재선언이 불가능하다.


const

let과 마찬가지로 block-scoped인데, 할당값을 바꿀 수 없고 재선언 될 수 없다.

const number = 42;

try {
  number = 99;
} catch (err) {
  console.log(err);
  // expected output: TypeError: invalid assignment to const `number'
  // Note - error messages will vary depending on browser
}

console.log(number);
// expected output: 42
반응형