자바스크립트에서는 함수를 함수 선언문과 함수 표현식 두 가지 방식으로 정의할 수 있다
함수 선언문과 함수 표현식의 주요 차이점은 함수의 호이스팅과 사용 방식에 있다
호이스팅(hoisting)이란?
호이스팅(hoisting)이란? 자바스크립트에서 변수와 함수의 선언이 해당 범위의 최상단으로 끌어올려지는 동작을 말한다해당 범위는 스코프를 말한다작성 위치와 상관 없이 변수 선언과 함수 선
08x0040x.tistory.com
- 함수 선언문
- 호이스팅으로 스코프의 최상단으로 끌어올려지기 때문에 함수가 선언되기 전에 호출할 수 있다
- 이름을 반드시 가져야 한다
- 전역 스코프에 등록된다 함수 선언문으로 정의된 함수는 전역 또는 함수 내부 스코프에 등록된다
- 함수표현식
- 변수 선언자의 호이스팅 방식을 따른다
어떤 변수 선언자를 사용하든 함수 표현식은 변수의 값으로 함수를 저장하기 때문에
변수의 선언 및 초기화가 이루어진 후에 사용할 수 있다 - 익명 함수 가능
const sayHello = function() { console.log("Delayed Hello"); }; setTimeout(sayHello, 1000); - 변수 선언자의 스코프에 따른다
재할당, 재선언 가능 여부도 변수 선언자에 따른다
- 변수 선언자의 호이스팅 방식을 따른다
함수 표현식에서는 익명 함수를 변수에 대입하는데 그럼 변수명이 함수명이 되는 건가,란 생각이 들었다
하지만 해당 변수의 변수명과 함수명은 다른 개념이라고 한다
함수 표현식은 익명 함수를 변수에 할당할 수 있고, 기명 함수를 변수에 할당할 수도 있다
이때 변수는 단지 그 함수의 참조를 저장하는 역할을 할 뿐이다
기명 함수 표현식
const greet = function sayHello() {
console.log("Hello!");
};
greet(); // "Hello!"
sayHello(); // ReferenceError: sayHello is not defined
기명 함수는 재귀 호출, 디버깅 등과 같은 경우 유용하게 사용할 수 있다
재귀 호출 예
const factorial = function fact(n) {
if (n <= 1) return 1;
return n * fact(n - 1); // 함수 이름을 사용하여 재귀 호출
};
console.log(factorial(5)); // 120
디버깅 예
const greet = function sayHello() {
throw new Error("Oops!");
};
greet(); // Error: Oops! at sayHello
'Javascript' 카테고리의 다른 글
| this 키워드 (0) | 2024.10.13 |
|---|---|
| 클로저(Closure)란? (1) | 2024.10.05 |
| var, let, const 차이 (0) | 2024.10.01 |
| 스코프(Scope)란? (0) | 2024.10.01 |
| 호이스팅(hoisting)이란? (6) | 2024.10.01 |