: 정의부만 존재, 전체 다 호이스팅
function a(){/*...*/} a() ; // 실행 OK
정의한 함수를 별도의 변수에 할당한 표현식
선언부만 호이스팅, 할당은 그 자리 그대로
(익명) 함수 표현식. 변수명 b가 곧 함수명
var b = function () {/*...*/} / b(); // 실행 OK
기명 함수 표현식. 변수명은 c, 함수명은 d.
var c = function d() {/*...*/} c(); // 실행 OK d(); // 에러!
console.log(sum(1,2));
console.log(multiply(3,4));
function sum(a, b) { // (함수명 sum이 곧 변수명❗)
return a + b;
}
var multiply = function (a,b) {
return a * b;
}
위의 코드가 호이스팅을 마치면 아래 코드처럼 된다.
var sum = function sum(a, b) { //전체 다 끌어올려짐(함수명 sum이 곧 변수명❗)
return a + b;
}
var multiply; // 선언부만 호이스팅 됨
console.log(sum(1,2)); // 3
console.log(multiply(3,4)); // multiply is not a function
multiply = function (a,b) {
return a * b;
}