일반 함수의 정의문의 경우 (=이름이 있는 함수)의 경우 호이스팅 기능을 지원
함수의 호이스팅은 함수 정의문보다 함수 호출문이 등장하더라도 해당 함수를
정상적으로 실행하는 것을 말한다.
일반 함수가 정의되면 자바스크립트 엔진 메모리 공간 안에 함수의 이름을
이용해 미리 저장해둔다.
저장된 일반 함수는 해당 함수보다 호출문 먼저 등장하더라도 호이스팅에 의해
정상 실행된다.
하지만 익명 함수 즉, 이름이 없는 함수의 경우 호이스팅 기능이 적용되지 않는다.
그렇기 때문에 함수정의가 먼저 이루어진 후에 함수 호출문이 등장해야만
함수가 실행된다.
[기본형]
1. 일반함수 정의문
함수명(); <- 함수호출문 먼저 등장
function 함수명(){
자바스크립트 코드;
} => 호이스팅에 의해 정상 실행
2. 익명함수 정의문
변수명(); <- 오류발생. 호이스팅 기능이 없어 함수정의문보다 먼저
등장 불가능
let 변수명 = function(){
자바스크립트 코드;
}
변수명(); <- 익명함수 호출문.함수보다 먼저 호출할 수 없다.
함수의 유효범위를 뜻함.
함수도 변수처럼 전역함수(global function)와 지역함수(local function)
로 나눠진다
전역함수는 자바스크립트 어디서든 사용할 수 있는 함수를 말하며
지역함수는 함수 스코프 안에서만 사용할 수 있는 함수를 말하며
[기본형]
<script>
↓전역함수 스크립트 내부 전역에서 사용할 수 있다.
function 함수명(){
자바스크립트 코드;
}
function 함수명1(){
↓지역함수. 함수 안에 들어있는 함수로, 지역의 스코프를 가짐
function 함수명2(){
자바스크립트 코드;
}
}
<닫힌 스크립트 태그>

지역변수는 호출 된 안쪽에서만 호출을 해야 사용가능하고,
지역범위를 감사꼬 있는 전역변수는 지역변수를 먼저 안쪽에서 가동 시켜줘야지 실행이 된다.
꼭!! 각자의 유효범위를 잘 지켜줄 것!


전역 함수 다음에 지역함수가 잘 나오는 걸 볼 수 있다.
지역함수는 바깥에 있는 전역함수랑 겹치더라도 유효범위가 달라서 코드가 깨지지 않는다.
여러 개발자들이 충돌을 막기 위해 사용한다.