변수와 상수는 프로그래밍에서 실행된 값들을 임시보관하는 역할이다.
변수 (let)
- 바뀔 수 있는 값을 의미한다.
- 한번 값을 선언하고 나서 바꿀 수 있다. (여러번 값을 할당할 수 있다.)
- 주의! 한 번 선언했으면 같은 이름으로 선언할 수 없다.
- 단, 다른 블록 범위 내에서는 똑같은 이름으로 사용이 가능하긴 하다.
let value = 1;
console.log(value); // 1
value = 2;
console.log(value); // 2
상수 (const)
- 한 번 선언하고 값이 바뀌지 않는 값을 의미한다. Constant.
- 값이 고정적이다.
- 주의! 한 번 선언했으면 같은 이름으로 선언할 수 없다.
const a = 1;
a = 2;
// Error: "a" is read-only
var
변수를 선언하는 방법으로 var 이라는 키워드가 있다. 이 키워드는 모던 자바스크립트에서는 더 이상 사용하지 않는다.
var 과 let 의 주요 차이점은 똑같은 이름으로 여러번 선언할 수 있다. 또한 var 과 let 은 사용할 수 있는 범위가 다르다.
추가적으로 IE9, IE10 같은 구형 브라우저에서는 let 과 const 를 사용할 수 없다. 하지만, 보통 개발을 하게 될 때는 Babel과 같은 도구를 사용하여 코드가 구형 브라우저에서도 돌아갈 수 있게끔 변환작업을 한다.
변수의 유효범위
const, let의 유효범위: { }
로 이루어진 하나의 영역, 블록 스코프
*블록={ }
- 블럭 내부 유효
- 블럭 밖에서 선언한 변수, 블럭 안에서 사용가능
- 블럭 안에서 선언한 변수를 밖에서 사용할 수 없다. (밖에서 조회할 수 없음)
- 중첩된 블럭 내에서 사용가능
var의 유효범위
함수 유효범위: function( ) { }
로 이루어진 함수 스코프
var
는 es5 버전까지 가장 많이 사용되던 함수- es6 버전부터는
let
과const
를 많이 사용 - 일반적으로 함수 스코프보다는 블록 스코프가 직관적으로 알아보기에 편리하여 블록 스코프 방식을 주로 사용하는 것으로 변경되었다.
- var는 상수가 아닌 변수처럼 언제든지 값을 바꿔서 사용할 수 있는 함수 선언방식이다.
- 함수 스코프를 가지고 있는 선언방식은 블록 스코프에서는 블록의 유무와 상관없이 스코프의 의미를 가지고 있지 않는다. 함수 스코프에서만 유효하다.
// 함수 바깥에서 선언한 a는 함수 내부에서 사용할 수 있다.
var a = 0;
(function() {
a++;
console.log(a);
}) ();
console.log(a);
// 함수 내부에 선언한 b를 함수 바깥에서 사용할 수 없다.
(function() {
var b = 0;
console.log(b);
}) ();
b++;
console.log(b); // 조회불가