
1)global and local scope
var x = 'global x';
var y = 'global y';
function outer(){
var z = "outer's local z";
console.log(x);
console.log(y);
console.log(z);
function inner(){
var x = "inner's local x";
console.log(x);
console.log(y);
console.log(z);
}
inner();
}
outer();
2) functional level scope
// i는 전역 변수
var i = 0;
// 전역 변수로 이미 선언 된 i가 중복 선언 된다.
for(var i = 0 ; i < 10 ; i++){}
// for 코드 블럭 내부의 값 변화가 반영 된다.
console.log(i);
1) var
ES5까지 변수를 선언할 수 있는 유일한 방법은 var 키워드를 사용하는 것
중복 선언 문제
var msg = '안녕하세요';
//중복선언
var msg = '안녕히가세요';
// 초기화 문이 없는 변수 선언문은 무시 된다.
var msg;
함수 레벨 스코프
var i = 0 ;
for(var i = 0 ; i < 10 ; i++){}
console.log(i);
변수 호이스팅
console.log(test);
test = '반갑습니다.';
console.log(test);
var test;2) letvar 키워드의 단점을 보완하기 위해 ES6에서는 새로운 변수 키워드인 let, const를 도입
변수 중복 선언 금지
블록 레벨 스코프
let i = 0;
for(let i = 0 ; i < 10 ; i++){
console.log(`지역변수 i : ${i}`);
}
console.log(`전역변수 i : ${i}`);
변수 호이스팅
3) const
let의 특징과 동일하지만 상수 선언에서 사용된다는 점이 특징
const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화
const 키워드로 선언한 변수는 재할당 금지
일반적으로 상수의 이름은 대문자로 선언해 상수임을 나타냄
const DISCOUNT_RATE = 0.1;
대상 객체를 변경하는 것은 불가능하지만 객체의 프로퍼티를 변경하는 것은 가능
const 키워드로 선언 된 변수에 객체를 할당한 경우 프로퍼티 값을 변경할 수 있다.
const student = {
name : '홍길동',
age : 20
};
student.name = '유관순';
console.log(student);
// 객체 재할당은 불가능하다.
// student = {}; TypeError : Assignment to constant variable