var x = 1;
var y = 1;
// 초기화가 있는 변수 선언문은 var 키워드가 없는 것처럼 동작함
var x = 100;
// 초기화가 없는 변수 선언문은 무시됨
var y;
console.log(x); // 100
console.log(y); // 1
// 함수 외부의 코드 블록 내에서 var 키워드로 변수 선언할 경우
var x = 1;
if (true) {
// 코드 블록 내에서 선언한 x는 전역 변수임
// 이미 선언된 전역 변수 x가 있으므로 중복 선언됨
var x = 10;
}
// 의도치 않게 x 변수의 값이 변경됨
console.log(x); // 10;
// 함수 외부의 for 문의 변수 선언문에서 var 키워드로 선언할 경우
var i = 10;
// for문에서 선언한 i는 전역 변수임
// 이미 선언된 전역 변수 i가 있으므로 중복 선언됨
for (var i = 0; i < 5; i++) {
console.log(i); // 0 1 2 3 4
}
// 의도치 않게 i 변수의 값이 변경됨
console.log(i); // 5
// 1. 선언 단계 : 변수 호이스팅에 의해 foo 변수가 이미 선언됨
// 2. 초기화 단계 : foo 변수는 undefined로 초기화됨
console.log(foo); // undefined
foo = 123;
console.log(foo); // 123
// 변수 선언은 런타임 이전에 암묵적으로 실행됨
var foo;
let bar = 123;
let bar = 456; // SyntaxError : Identifier 'bar' has already been declared
// 전역 변수 i
let i = 10;
if (true) {
// 지역 변수 i, j
let i = 100;
let j = 0;
}
console.log(i); // 10
console.log(j); // ReferenceError: j is not defined
// 전역 스코프
let i = 10;
function foo() {
// 함수 레벨 스코프
let i = 100;
for (let i = 1; i < 3; i++) {
// 블록 레벨 스코프
console.log(i); // 1 2
}
console.log(i); // 100
}
foo();
console.log(i); // 10
// 런타임 이전에 선언 단계가 실행됨, 아직 변수가 초기화되지 않음
console.log(foo); // ReferenceError : foo is not Defined
let foo; // 변수 선언문에서 초기화 단계가 실행됨
console.log(foo); // undefined
foo = 1; // 변수 할당문에서 할당 단계가 실행됨
console.log(foo); // 1
let foo = 1; // 전역 변수
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // 지역 변수
}
// 전역 변수
var x = 1;
// 암묵적 전역
y = 2;
// 전역 함수
function foo() {}
console.log(window.x); // 1
console.log(x); // 1
console.log(window.y); // 2
console.log(y); // 2
console.log(window.foo); // f foo() {}
console.log(foo); // f foo() {}
// 전역 변수
let x = 1;
console.log(window.x); // undefined
console.log(x); // 1
const x = 1;
const y; // SyntaxError: Missing initialier in const declaration
{
// 블록 레벨 스코프
// 변수 x가 선언되었지만, 아직 초기화되지 않음
console.log(x); // ReferenceError: Cannot access 'x' before initialization
const x = 1; // 초기화 단계
console.log(x); // 1
}
// 전역 스코프
// 블록 레벨 스코프는 하위 스코프이므로 참조 불가능함
console.log(x); // ReferenceError: x is not defined
const x = 1;
x = 2; // TypeError: Assignment to constant variabe
const 키워드로 선언된 변수에 원시 값을 할당한 경우
상수
const TAX_RATE = 0.1;
let preTaxPrice = 100;
let afterTaxPrice = preTaxPrice + (preTaxPrice * TAX_RATE);