Fundamentals/JavaScript
함수 전달 방식에 대한 이해: 함수 선언 vs. 기명 함수 표현식
sod0l
2024. 9. 10. 15:10
1. 첫 번째 방식: 함수 선언
function sub() {
console.log("i am sub");
}
main(sub);
- 함수 선언을 사용해
sub
라는 이름의 함수를 먼저 정의한 후, 이 함수를main
함수에 전달한다. - 이렇게 하면
sub
함수는 코드의 다른 부분에서도 사용할 수 있다. 즉,sub
라는 이름을 가진 함수가 어디에서든 접근 가능하다. - 가독성이 좋고 , 여러 곳에서
sub
함수를 재사용할 수 있다.
2. 두 번째 방식: 기명 함수 표현식
main(function sub() {
console.log("i am sub");
}
- 기명 함수 표현식을 사용하여 함수를 직접
main
함수에 전달한다. 여기서 함수는 이름을 가지고 있지만, 오직main
함수에서만 사용된다. - 이 방식은 함수가 오직
main
에서만 사용되며 다른 곳에서 접근할 필요가 없다는 것을 명확히 한다. - 전역 네임스페이스를 오염시키지 않고, 해당 함수가 한 곳에서만 쓰인다는 것을 분명히 할 수 있다.
3. 왜 두번째 방식을 권장할까?
- 스코프의 한정성: 함수가 특정 작업에만 쓰이므로, 다른 부분에서 사용할 필요가 없다면, 그 위치에서 바로 정의하는 것이 좋다.
- 스코프의 명확성: 위와 비슷하게 기명 함수 표현식은 정의된 위치에서만 사용할 수 있으므로 함수의 사용 범위를 제한하고, 코드의 의도를 명확히 할 수 있다.
- 전역 오염 방지: 필요 없는 전역 함수 순언을 피할 수 있어 코드가 깔끔해진다.
- 호이스팅 방지: 기명 함수 표현식은 선언과 동시에 함수가 정의되며, 코드에서 해당 함수가 사용될 때까지 함수가 정의되지 않는다. 따라서 호이스팅과 관련된 혼란을 피할 수 있다.
- 코드의 가독성: 코드가 함수의 정의와 사용 위치가 가까워져 가독성이 좋아질 수 있다. 함수가 다른 곳에서 사용되지 않거나, 특정 함수가 특정 작업에만 쓰일 때 이 방식이 유용하다.
4. 결론
함수가 특정 작업에서만 필요하고 다른 곳에서 재사용하지 않을 경우, 두 번째 방법이 더 적합하다. 이렇게하면 코드의 의도를 명확히 하고, 코드의 관리가 쉬워진다.
‘기명 함수 표현식’이라는 이름이 어려워서 남기는 메모
- 간단한 용어로 설명하기
- 함수 표현식: 함수 정의를 변수에 할당하는 방식으로, 이름이 있는 함수 정의
- 이름 붙은 함수: 함수 정의에 이름을 붙여서 사용하는 방법
- 비교를 통한 이해
- 함수 선언:
function myFunction() { /* code */ }
(전역 또는 상위 스코프에서 사용 가능) - 이름 붙은 함수 표현식:
main(function myFunctinon() { /* code */ });
(특정 작업에만 사용됨)
- 함수 선언:
- 코스 예시로 이해하기
- 함수 선언:
main(functio greet() { console.log("Hello!"); }); // main 함수 내에서만 사용 가능
- 이름 붙은 함수 표현식:
function greet() { console.log("Hello!"); } greet(); // 어디에서든 사용 가능
- 함수 선언: