호이스팅이란 코드가 실행되기전 코드안에 있는 모든 변수들과 함수들을 가장 최상단으로 끌어올려 선언되는것을 말한다.
여기서 사실 많이 헷갈리기 시작했다. 우선순위는 변수할당,함수선언,변수선언이다. 사실 여기서 헷갈린 부분은
console.log(hello);
var hello = 'hello 변수 호출 입니다.';
function hello(){
return "hello 함수 호출입니다.";
}
console.log(hello);
위의 결과였다.
아래의 console.log의 hello 호출은 당연히 변수할당이 함수선언보다 우선 순위에 있으니 변수가 함수선언문을 덮어쓰는것을 예상할수 있었다. 근데 변수할당과 함수선언 전에 hello를 호출하면 누가 호출 될지 궁금해 호출해 봤는데 함수가 호출되는것이었다. 공부했던 것과 다른 결과를 얻었고 이곳저곳 찾아보니 내 결론은 이렇게 나오게 되었다.
// var hello;
// function hello(){
// return "hello 함수 호출입니다.";
//}
console.log(hello);
hello = 'hello 변수 호출 입니다.';
위의 코드는 처음 코드가 실행이되면 호이스팅 되는것을 작성해봤다. 그래서 내 결론은 호이스팅 되면서 변수할당전에 hello를 호출하니까 호출 위에서는 호이스팅으로 변수의 선언만 되었기 때문에 함수선언이 더 우선순위에 있어 함수가 호출된것이라는 결론이 내려졌다.
앞서 자바를 공부하고 자바스크립트를 공부하니 자유도가 많은 언어이면서 자바와는 다른 특징을 가지는것이 생각보다 많아 혼란이 좀 생기는것 같다.