Function Expression
let sum = function(a, b){
return a + b;
};
Function Declaration
function sum(a, b){
return a + b;
}
함수 선언식은 호이스팅에 영향을 받지만, 함수 표현식은 호이스팅에 영향을 받지 않는다.
코드가 실행하기 전, 변수/함수 선언을 해당 스코프의 최상단으로 끌어올리는 것이다.
(실제로 끌어올려지는 것이 아닌, JavaScript Parser가 내부적으로 끌어올려서 처리한다.)
⭕ var
와 함수 선언문
이 호이스팅 대상이다.
❌ let
/ const
그리고 함수 표현식
은 호이스팅 대상이 아니다.
함수 표현식
- 실제 실행 흐름이 해당 함수에 도달했을 때 함수를 생성한다.
장점
: 호이스팅에 영향을 받지 않는다.
sayHi("John"); // 함수 생성되지 않은 상태. error
let sayHi = function(name) { // 실행흐름이 여기에 도달했을 때, 함수 생성됨.
alert( `Hello, ${name}` );
};
함수선언식
- 함수선언식이 정의되기 전에 호출이 가능하다.
장점
: 함수가 선언되기 이전에도 함수를 활용할 수 있기 때문에, 코드를 유연하게 구성할 수 있다.
sayHi("Hyerin"); // Hello, Hyerin
function sayHi(name){
alert(`Hello, ${name}`);
}