var
키워드로 선언한 변수는 블록 스코프를 따르지 않습니다. 함수 스코프만 따릅니다.
var
변수의 스코프는 전역 스코프 혹은 함수 스코프입니다.
var
키워드로 선언한 변수는 중복으로 선언이 가능합니다.
var
키워드로 중복 선언한 선언문은 무시됩니다.
중복 선언과 동시에 초기화를 진행한다면, 값만 덮어씌워집니다.
var user = "Pete";
var user = "John"; // 이 "var"는 아무것도 하지 않습니다(이전에 이미 선언됨).
// ...에러 또한 발생하지 않습니다.
alert(user); // John
var
키워드로 선언한 변수는 호이스팅됩니다.
호이스팅은 선언문이 코드 최상단으로 끌어올려지는 현상을 말합니다.
엄밀히 말하면 var
선언문 뿐만 아니라 모든 선언문이 hoisting됩니다. hosting 동작 방식에 약간의 차이가 존재하지만 여기서 언급하지 않겠습니다.
var
변수는 호이스팅 때문에 코드 최상단으로 끌어 올려지며, undefined
로 우선 초기화 됩니다.
var
변수는 할당문에 도달하게 될 때 값이 할당됩니다.
function sayHi() {
var phrase; // 선언은 함수 시작 시 처리됩니다.
alert(phrase); // undefined
phrase = "Hello"; // 할당은 실행 흐름이 해당 코드에 도달했을 때 처리됩니다.
}
sayHi();
function sayHi() {
phrase = "Hello"; //
if (false) {
var phrase; // 블록스코프를 따르지 않기 때문에 var 선언문은 최상단으로 끌어올려지며, "Hello"가 할당됩니다.
}
alert(phrase);
}
sayHi();