변수는 상징적인 이름이다. 예를 들어, "나의 직업은 개발자이다."라고 했을 때, '직업'이라는 큰 주머니가 변수가 될 수 있다.
let job = "developer" //"developer"자리에 다른 직업들이 와도 된다!
"개발자"는 변수에 들어가는 값이다.
위에도 설명했듯이, "개발자" 외에도 다른 값들이 포함될 수 있다.
큰 주머니 안에 다양한 값들이 들어갈 수 있다고 이해했다.
변수의 선언에는 3가지 방법이 있다. var/let/const가 있다. 이 중 'var'는 최근에 잘 안 쓰인다고 한다.
var. let. const는 5가지 차이점이 있다.
1) 중복선언 가능: 마지막 할당된 값이 변수에 저장된다.
var a = 10; var a = 20; //가능
2) 재할당: 변수 선언 및 초기화 후 다른 값 재할당 가능
var a = 10; a = 20; //가능
3) 스코프(scope) : 함수 레벨 스코프(function-level scope)
var는 함수 내부에 선언된 변수만 지역변수로 한정하며, 나머지는 모두 전역변수로 간주한다.function hello() { var a = 10; console.log(a); } hello(); //값: 10 console.log(a); // 값: ReferenceError: a is not defined
4) 호이스팅: 변수 호이스팅 발생
console.log(a) //undefined var a = 10; console.log(a); //10
뒤에서 선언된 변수 a가 앞에서 참조되었음에도 에러를 발생시키지 않는다. 이것을 var로 선언된 변수의 호이스팅이다!
5) 전역객체 프로퍼티
var a = 10; console.log(window.a) //10 console.log(a); //10
브라우저 환경에서 위 코드 실행 시, var로 선언한 변수 a는 브라우저 전역객체인 window의 프로퍼티로 할당된다.
1) 중복선언: 불가능
선언한 변수를 다시 선언할 경우 에러 발생let a = 10; let a = 20; //불가능
2) 재할당: 가능
let a = 20; a = 30; //가능
3) 블록 레벨 스코프(block-level scope)
if(true) { let a = 10; console.log(a); //10 } console.log(a); //10
함수 내부는 물론, if문이나 for문 등의 코드블럭에서 선언된 변수도 지역변수로 취급한다.
4) 호이스팅 : 다른 방식으로 작동한다.
console.log(a); //ReferenceError : a is not defined let a = 10;
호이스팅이 발생하긴 하지만 값을 참조할 수 없어 호이스팅이 발생하지 않는 것처럼 보인다.
5) 전역객체 프로퍼티가 아니다.
1) 중복선언: 불가능
선언한 변수를 다시 선언할 경우 에러 발생const a = 10; const a = 20; //불가능
2) 재할당: 불가능 (let과의 차이점)
const a = 20; a = 30; //가능
3) 블록 레벨 스코프(block-level scope)
if(true) { const a = 10; console.log(a); //10 } console.log(a); //10
함수 내부는 물론, if문이나 for문 등의 코드블럭에서 선언된 변수도 지역변수로 취급한다.
4) 호이스팅 : 다른 방식으로 작동한다.
console.log(a); //ReferenceError : a is not defined const a = 10;
호이스팅이 발생하긴 하지만 값을 참조할 수 없어 호이스팅이 발생하지 않는 것처럼 보인다.
5) 전역객체 프로퍼티가 아니다.