Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- macos flutter
- flutter 오류
- JavaScript
- 웹개발
- 웹 성능
- html
- 프라미스체이닝
- css
- flutter android sdk
- 자바스크립트
- cmdline-tools missing
- jsx
- dom
- 코드리뷰
- fe
- 국제화(i18n)
- 웹 성능 최적화
- #프론트엔드개발
- React
- 퍼포먼스 최적화
- 비동기프로그래밍
- 프론트엔드
- 자바스크립트공부
- 컴포넌트
- 패키지 스크립트
- 풀스택 개발
- 웹 개발
- Promise
- aondroid toolchain 오류
- Node.js
Archives
- Today
- Total
sodol-dotcom
함수 선언식과 함수 표현식 본문
자바스크립트에서는 함수를 정의하는 두 가지 주요 방법이 있다: 함수 선언식과 함수 표현식.
이 두 가지 방법의 차이와 호이스팅이 어떻게 작용하는지에 대해 살펴보면,
1. 함수 선언식 (Function Declaration)
함수 선언식은 함수 이름과 함께 정의한다. 자바스크립트는 코드 실행 전에 함수 선언을 자동으로 "호이스팅"한다. 이는 함수 선언이 코드의 맨 위로 끌어올려지는 것처럼 작동하여, 함수가 정의되기 전에도 호출할 수 있게 한다.
예시:
sayHello(); // "Hello" 출력
function sayHello() {
console.log("Hello");
}
여기서 sayHello
함수는 선언하기 전에 호출해도 문제없다. 자바스크립트가 코드 실행 전에 함수 선언을 호이스팅하기 때문에, sayHello
함수의 정의가 코드의 맨 위로 끌어올려진 것처럼 동작한다.
2. 함수 표현식 (Function Expression)
함수 표현식은 함수를 변수에 할당하는 방식으로 정의한다. 이 경우, 함수는 변수에 할당된 후에만 호출할 수 있다. 호이스팅이 함수 표현식에는 적용되지 않기 때문에, 함수 표현식을 정의하기 전에는 함수 이름을 사용할 수 없다.
예시:
let greet = function() {
console.log("Hello");
};
greet(); // "Hello" 출력
여기서 greet
변수에 함수가 할당되었기 때문에 greet()
를 호출할 수 있다. 그러나 함수 표현식의 이름을 직접 참조하는 것은 불가능하다.
3. 문제 발생 예시:
let varB = function funcB() {
console.log("funcB");
};
varB(); // "funcB" 출력
funcB(); // 오류 발생
varB()
: 잘 작동한다.varB
는 함수 표현식으로 정의된 함수이기 때문에 호출할 수 있다.funcB()
: 오류가 발생한다.funcB
는 함수 표현식 내부에서만 사용 가능한 이름이다. 함수 표현식의 이름funcB
는varB
변수에 할당된 후에만 사용할 수 있으며, 외부에서는 참조할 수 없기 때문에 오류가 발생한다.
4. 호이스팅 요약
- 함수 선언식은 호이스팅되어, 함수가 코드의 상단으로 끌어올려진 것처럼 동작하여 함수 정의 전에도 호출할 수 있다.
'Fundamentals > JavaScript' 카테고리의 다른 글
함수 스코프, 지역 스코프, 블록 스코프 (0) | 2024.09.12 |
---|---|
함수 선언문의 스코프 (0) | 2024.09.12 |
함수 전달 방식에 대한 이해: 함수 선언 vs. 기명 함수 표현식 (0) | 2024.09.10 |
자바스크립트 호이스팅 (0) | 2024.09.09 |
함수의 반환과 할당: return 문이 없을 때 undefined가 반환되는 이유 (0) | 2024.09.09 |