var name = 'Max';
if(name === 'Max'){
var age = 20;
console.log(age);
}
console.log(age);
다음과 같은 상황에서 age는 2번 출력된다.
var 을 사용해 변수를 생성하면 마치 전역변수인 것 처럼 사용할 수 있기 때문에 코드가 길어지고 복잡해지면 예상치 못한 에러가 발생할 수 있다.
let, const 는 블럭 스코프로 변수가 생성되지만 var의 경우 함수, 전역 스코프로 밖에 생성되지 않는다.
(var - if 블럭의 변수를 전역변수로 사용한다. / let,const - 중괄호 내의 블럭 스코프를 사용한다.)
console.log(name);
var name = 'Max';
이 경우 에러가 아닌 undefined 가 출력된다. (let, const는 에러 발생)
브라우저의 js엔진은 전체 스크립트를 확인해서 함수를 찾은 뒤 자동으로 로드하고 등록해서 실제 사용하는 코드 아래 함수를 작성하도록 한다.
변수 또한 마찬가지로 작동한다.
var name;
console.log(name);
name = 'Max'
var, let, const 모두 호이스팅 당한다.(스코프 내에서 맨 위로 끌어 올려진다.)
그러나 var의 경우 선언과 동시에 undefined로 초기화가 되어 에러가 발생하지 않는다.
'user strict'; 를 추가하면 염격모드를 활성화할 수 있다.