<JS>다양한 함수의 형태

윤건호·2022년 4월 18일
0

자바스크립트

목록 보기
16/26
post-thumbnail

즉시 실행 함수

함수 정의와 동시에 즉시 호출되는 함수를 즉시 실행 함수라고 한다.

즉시 실행 함수는 단 한번만 호출되며 다시 호출할 수 없다.

(function () {
var a = 3;
var b = 5;
return a + b ;
}());

즉시 실행함수는 위와같이 함수 이름이 없는 익명 함수를 사용하는 것이 일반적이다.

함수 이름이 있는 기명 즉시 실행 함수도 사용할 수 있다.

하지만 그룹 연산자(...) 내의 기명 함수는 함수 선언문이 아니라

함수 리터럴로 평가되며 함수 이름은 함수 몸체에서만 참조할 수 있는 식별자 이므로

즉시 실행 할수를 다시 호출할 수는 없다.

(function foo(){
var a = 3;
var b = 5;
return a + b;
}());
foo(); // ReferenceError : foo is not defined
// foo함수를 호출하지만 참조 에러가 나오는 모습

재귀 함수

함수가 자기 자신을 호출하는 것을 재귀 호출이락 한다.

재귀 함수는 자기 자신을 호출하는 행위, 즉 재귀 호출을 수행하는 함수를 말한다.

Let count = 0;
const test = () => {
if(count < 50) {
count++;
console.log(count);
test();
};
test();

위의 함수처럼 재귀 함수는 자신을 무한 재귀 호출한다.

만약 위의 if문에 조건식이 항상 참이 되는 식이라면 함수가 무한 호출되어

스택 오버플로 에러가 발생한다.

따라서 위의 예시처럼 재귀 호출을 멈출 수 있는 탈출 조건을 반드시 만들어야한다.

중첩 함수

함수 내부에 정의된 함수를 중첩 함수 또는 내부 함수라고 한다.

중첩 함수를 포함하는 함수를 외부 함수라고 한다.

중첩 함수는 외부 함수 내부에서만 호출할 수 있다.

function outer() {
var x = 1;
// 중첩 함수
function inner() {
var y = 2;
// 외부 함수의 변수를 참조할 수 있다.
console.log(x + y); // 3
}
inner();
}
outer();

위 예제에서 inner 라는 함수는 outer 함수에 중첩되어 있는 중첩 함수이다.

위 예제에서 outer 라는 함수는 inner 함수의 외부 함수이다.

중첩 함수(inner)는 일반적으로 자신을 포함하는 외부 함수(outer)를 돕는
헬퍼 함수 역할을 한다.

ES6부터는 if문이나 for문 등의 코드 블록 내에서도 정의할 수 있다.

하지만 호이스팅으로 인한 혼란이 발생할 수 있으므로 if문이나 for문 등의

코드 블록에서 함수 선언문을 통해 함수를 정의하는 것은 바람직하지 않다.

콜백 함수

함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백 함수 라고 한다.

변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수를 고차 함수 라고한다.

외부에서 전달받은 f를 n만큼 반복 호출한다.
function repeat(n,f){
for (let i = 0; i < n; i++){
f(i); // i를 전달하면서 f를 호출
}
}

let logAll = function (i) {
console.log(i);
};

반복 호출할 함수를 인수로 전달한다.
repeat(5,logAll); // 0 1 2 3 4

콜백 함수는 함수형 프로그래밍 패러다임뿐만 아니라 비동기 처리

(이벤트 처리 , Ajax통신 , 타이머 함수 등)에 활용되는 중요한 패턴이다.

콜백 함수를 사용한 이벤트 처리
myButton 버튼을 클릭하면 콜백 함수를 실행한다.
document.getElementById('myButton').addEventListener('click, function(){
console.log('button clicked');
});
// 콜백 함수를 사용한 비동기 처리

순수 함수 비순수 함수

함수형 프로그래밍에서는 어떤 외부 상태에 의존하지도 않고 변경하지도 않는,
즉 부수 효과가 없는 함수를 순수 함수라 한다.

외부 상태에 의존하거나 외부 상태를 변경하는,
즉 부수 효과가 있는 함수를 비순수 함수라 한다.

순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환한다.

또 함수의 외부 상태를 변경하지 않는다.

let count = 0;
function increase(n) {
return ++n;
} // 순수 함수 increase는 동일한 인수가 전달되면 언제나 동일하게 반환한다.
// 순수 함수가 반환한 결과값을 변수에 재할당해서 상태를 변경
count = increase(count);
console.log(count); // 1
count = increase(count);
console.log(count); // 2

함수의 외부 상태에 따라 반환 값이 달라지는 함수 ,

외부 상태에 의존하는 함수를 비순수 함수라고 한다.

profile
더 배우고 싶은 프론트엔드 개발자 윤건호입니다.

0개의 댓글