콜백함수



 자바스크립트에서는 함수도 하나의 자료형이라고 하였다. 따라서 함수도 매개변수로 전달 할 수가 있는데,


이렇게 매개변수로 전달하는 함수를 콜백함수라고 한다.


<script>
function callTenTimes(callback) {
for(let i = 0; i < 10; i++) {
callback();
}
}

var callback = function() {
alert('call function');
};

callTenTimes(callback);
</script>


위와 같이 callback이라는 함수가 callTenTimes함수의 매개변수로 전달되어 전달된 함수 안에서 호출하고 있다.


여기서 callback이라는 함수가 바로 콜백함수이다.


익명콜백함수

콜백함수는 익명함수로 사용하는 경우가 많다.

<script>
function callTenTimes(callback) {
for(let i = 0; i < 10; i++) {
callback();
}
}

callTenTimes(function() {
alert('call function');
});
</script>


위의 코드와 같이 매개변수로 콜백함수를 전달하면서 익명함수를 곧바로 입력하여 전달 할 수 있다.



함수를 리턴하는 함수

함수는 자바스크립트의 자료형이라서 매개변수로 전달 할 수 있다고 하였다.

마찬가지로 함수는 함수의 리턴값으로도 사용할 수 있다.


<script>
function returnFunction() {
return function() {
alert('This is return function.');
}
}

returnFunction()();
</script>


returnFunction함수의 리턴값으로 익명함수를 바로 입력하여 함수를 리턴하고 있다.


이때 returnFunction을 호출 시 함수가 리턴이 되기 때문에 그 리턴된 함수를 실행하기 위하여 아래와 같이 괄호를 한번 더 적어준다.

returnFunction()();


'개발 > JavaScript' 카테고리의 다른 글

[JavaScript] 객체  (2) 2018.07.06
[JavaScript] 클로저  (0) 2018.06.21
[JavaScript] 내부함수와 자기호출함수  (0) 2018.06.20
[JavaScript] 가변인자함수  (0) 2018.06.20
[JavaScript] 자바스크립트 함수의 매개변수  (0) 2018.06.20

내부함수와 자기호출함수



내부함수

 내부함수는 프로그램 개발 시 협업하여 발생할 수 있는 함수명 중복과 같은 충돌을 막기위한 방법이다.

함수를 정의 할 때 내부에 필요한 함수가 있으면 그 함수 내부에 정의를 하여 사용한다.

그래서 필요한 함수를 외부에 정의 했을 때 발생할 수 있는 충돌을 막을 수 있다.

<script>
function circle(width) {
function square(x) {
return x*x;
}
let pi = 3.14;

return pi * square(width);
}
alert(circle(10));
</script>


위와 같이 함수 내부에 정의한 내부함수는 내부함수를 포함하고 있는 함수 내에서만 사용이 가능하다.


그리고 내부함수와 같은 이름의 외부함수가 있을 경우 내부함수를 포함하고 있는 함수는 내부함수를 우선적으로 실행한다.


자기호출함수

다른 개발자에게 영향을 주지 않게 다음과 같이 생성하자마자 호출하여 사용할 수도 있다.

<script>
(function () {
alert('This is self call function');
})();
</script>


가변인자함수



가변인자함수는 매개변수의 개수에 따라 서로 다른 동작을 하는 함수이다. 예를 들면 Array()함수와 같은 것들이다.


arguments 변수

자바스크립트의 모든 함수는 내부에 argument라는 변수를 가지고 있다.

이 변수는 매개변수의 배열이다. 

즉, 함수를 호출할때 전달된 매개변수가 함수 내부에서 arguments라는 배열에 저장이 된다.


<script>
function sumAll() {
var output = 0;
for(let i of arguments) {
output += i;
}
return output
}
alert(sumAll(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
</script>


위의 sumAll 함수에는 매개변수가 정의되어있지 않지만, 전달된 매개변수를 arguments변수를 이용해서 사용하고 있다.


arguments는 배열이기 때문에 length키워드를 이용해 길이를 얻을 수가 있다. 


이 길이를 이용하면 매개변수의 개수에 따라서 원하는 동작을 하게 만들 수 있다.


<script>
function func() {

if(arguments.length == 0) {
//매개변수가 없을 때 실행코드
} else if(arguments.length == 1) {
//매개변수가 한개 일 때 실행코드
} else if(arguments.length == 2) {
//매개변수가 두개 일 때 실행코드
}
}
</script>


이렇게 매개변수의 개수인 arguments의 길이에 따라 동작하기를 원하는 코드를 적어주면 된다.

+ Recent posts