데이터를 편하게 다루기 위해 데이터에 붙이는 이름으로, 이름(label)이 붙은 값을 의미한다.
*데이터 보관함(메모리)의 크기는 모두 같다.
변수명 선언 시, 공백을 사용할 수 없기때문에 보통 단어의 첫 글자를 대문자로 써붙인다. 탁타 등 모양처럼 생겨 Camel Case라고 부른다.
let ateaOfCircle = pi * radius * radius;
변수는 동일한 변수를 이용해 대입할 수 있다.
let sum = 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
console.log(sum)
결과값: 10
*할당이 없는 변수는 undefined로 뜨는데 정의되지 않았다는 뜻으로, 이 자체로 값이다.
let num = 2;
console.log(num * 1) // 2
console.log(num * 2) // 4
console.log(num * 3) // 6
console.log(num * 4) // 8
console.log(num * 5) // 10
console.log(num * 6) // 12
console.log(num * 7) // 14
console.log(num * 8) // 16
console.log(num * 9) // 18
//num의 값을 바꿔주면서 n단까지 출력할 수 있다.
var a = 1;
console.log(a) //print 1
var a = 2;
console.log(a) //print 2
const a = 1;
console.log(a)
const a = 2;
console.log(a)
//Uncaught SyntaxError: Identifier 'a' has already been declared
const a = 1;
console.log(a) //print 1
a = 2;
console.log(a) //Uncaught SyntaxError: Identifier 'a' has already been declared
let a = 1;
console.log(a)
let a = 2;
console.log(a)
// Uncaught SyntaxError: Identifier 'a' has already been declared
let a = 1;
console.log(a) //print 1
a = 2;
console.log(a) //print 2
코드량이 많아졌을 때 중복선언의 위험이 크기 때문에 var은 잘 사용하지 않는다.
const를 기본으로, 재할당이 필요한 경우 let 을 사용하는 것이 좋다.
호이스팅(Hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미하며, 자바스크립트는 모든 변수 선언 키워드를 호이스팅한다.
var 키워드로 선언된 변수는 선언과 초기화가 한 번에 이루어져 기본적으로 undefined를 할당하는데, 변수 선언문 이전에 접근이 가능하다.
console.log(foo) // undefined
var foo;
console.log(foo); // undefined
var foo = 1; // 값 할당
console.log(foo) // 1
그러나, let, const 키워드로 선언된 변수는 선언과 초기화가 분리되어 진행된다. 변수가 아직 초기화 되지 않았기때문에 변수 선언문 이전에 접근 시, 참조에러(ReferenceError)가 발생한다. 따라서, 스코프 시작~초기화 시작 지점까지 변수를 참조할 수 없으며 이 구간을 ‘일시적 사각지대(Temporal Dead Zone)’라고 부른다.
console.log(foo) // Uncaught ReferenceError
let foo; //초기화
console.log(foo); // undefined
foo= 1; //값 할당
console.log(foo) // 1
Reference: 코드스테이츠