JS 에서 변수와 함수는 hoisting 이라는 성질을 갖습니다.

JS 는 변수, 함수의 선언부분을 최상단으로 끌어가서 먼저 해석하는 특징이 있습니다.

이러한 성질을 hoisting 이라고 부릅니다.

console.log(name); //undefined
var name = 'sanghoon';
console.log(name); //sanghoon

위 코드처럼 변수 name이 첫번째 콘솔보다 늦게 선언 할당이 이루어졌는데도 에러가 발생하지 않고

undefined라는 값이 찍히게 됩니다. 이는 JS의 hoisting 으로 인하여 변수의 선언부분이 코드의 최상단으로

끌어올라 가져서 값이 할당되지 않은 상태로 존재하기 때문에 undefined 라는 값이 나오게 되는것 입니다.

하지만 let, const 라는 키워드로 변수를 선언하게 되면 약간의 다른 방식으로 hoisting이 발생하게 됩니다.

function ageFunc(){
	console.log(age);
	console.log(name);
	
	let age = 26;
	const name = 'sanghoon';
}; //에러 발생

위 코드 를 보면 var 키워드로 선언했을 때와는 다르게 에러가 발생합니다.

let, const 는 hoisting은 이루어 지지만 var 처럼 undefined 라는 값을 할당해 주지 않아서

에러를 발생하게 합니다.

따라서 let, const를 사용하면 var보다 엄격하게 사용하여 hoisting으로 인한 사이드 에러를 방지할수 있습니다.