var
코드 내의 var
문은 코드가 실행 되기 전 먼저 선언되기 때문에 코드 내부 어느 줄에서 선언되더라도 그 변수를 사용할 수 있다. 이렇게 아래에 있는 선언이 위로 올라가는 듯한 모양을 보고 호이스팅 hoisting이라 한다. 다만 값이 할당 되는 것은 할당이 되는 줄에서 실행되므로 그 전의 값은 undefined
이다.
console.log(number); // undefined
var number = 234;
number = 123;
console.log(number); // 123 -> 선언 없이 할당만 해주어도 출력되는 모습
var number = 234;
console.log(number); // 234
var
문은 let
이나 const
와 달리 중복으로 선언할 수 있다.
var number = 123;
console.log(number);
var number = 234;
console.log(number);
코드가 길어지면 의도치 않게 변수명이 중복될 수 있기 때문에 let
이나 const
문을 사용하는 것이 좋다.
함수 스코프를 갖고 있어서 함수 내에서 선언되면 해당 함수 내에서만 사용할 수 있다. 하지만 반복문이나 조건문에서 선언되면 그 밖에서도 사용할 수 있다는 뜻이기도 하다.
function sayHi() {
var greetings = 'hello';
console.log(greetings);
}
sayHi(); // hello
console.log(greetings); // Uncaught ReferenceError: greetings is not defined
if (true) {
var greetings = 'hello';
console.log(greetings); // hello
}
console.log(greetings); // hello
const
선언과 할당을 동시에 해야 한다. 한 번 값을 할당하면 재할당 할 수 없다.
const PI; // Uncaught SyntaxError: Missing initializer in const declaration
PI = 3.14;
const PI = 3.14;
PI = 3.141592; // Uncaught TypeError: Assignment to constant variable.
블록 스코프를 갖는다: 중괄호 {}
안에서 쓰이면 해당 블록 밖에서는 변수를 사용할 수 없다.
function printPi() {
const PI = 3.14;
console.log(PI);
}
printPi(); // 3.14
console.log(PI); // Uncaught ReferenceError: PI is not defined
let
호이스팅이 일어나지 않는다.
블록 스코프를 갖는다: 중괄호 {}
안에서 쓰이면 해당 블록 밖에서는 변수를 사용할 수 없다.
똑같은 변수를 두 번 선언할 수 없다.
변수값을 재할당 할 수 있다.