First-class Function
)프로그래밍 언어는 해당 언어의 함수들이 다른 변수처럼 다루어질 때 일급 함수를 가진다.
const say = () => {
console.log("hello");
};
say(); // 변수를 사용해 호출
// hello
function say() {
return "hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// `sayHello`를 전달인자로 `greeting` 함수에 전달
greeting(say, "JavaScript!");
// hello, JavaScript!
say( )
함수를 greeting( )
함수에 전달인자로 전달하는데, 이것은 함수를 값으로서 어떻게 다루는지 설명.function sayHello() {
return () => {
console.log("Hello!");
};
}
higher order function
)인자로 받은 함수를 필요한 시점에 호출하거나 클로저
를 생성하여 반환한다.
argument
)로 함수를 넘겨줄 수 있다.함수의 전달인자로 넘겨주는 함수
를 콜백 함수Callback function)라고 한다.함수를 리턴하는 함수
로 커링 함수라고 한다.고차 함수는 콜백 함수와 커링 함수의 상위 개념.
function makeCounter(predicate) {
// 자유 변수. num의 상태는 유지되어야 한다.
let num = 0;
// 클로저. num의 상태를 유지한다.
return function () {
// predicate는 자유 변수 num의 상태를 변화시킨다.
num = predicate(num);
return num;
};
}
// 보조 함수
function increase(n) {
return ++n;
}
// 보조 함수
function decrease(n) {
return --n;
}
// makeCounter는 함수를 인수로 전달받는다. 그리고 클로저를 반환한다.
const increaser = makeCounter(increase);
console.log(increaser()); // 1
console.log(increaser()); // 2
// makeCounter는 함수를 인수로 전달받는다. 그리고 클로저를 반환한다.
const decreaser = makeCounter(decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2
함수형 프로그래밍은 순수 함수
(Pure function)와 보조 함수
의 조합을 통해 로직 내에 존재하는 조건문과 반복문을 제거하여 복잡성을 해결하고 변수의 사용을 억제하여 상태 변경을 피하려는 프로그래밍 패러다임이다.
callback function
)다른 함수(caller
)의 전달인자(argument
)로 전달되는 함수.
어떤 작업이 완료되었을 때 호출하는 경우가 많아서, 답신 전화를 뜻
콜백 함수를 전달받은 고차 함수(caller)는, 함수 내부에서 이 콜백 함수를 호출(invoke)할 수 있다.
// 콜백
function print(callback) {
callback();
}
print()
함수는 다른 함수를 파라미터로 받아서 내부에서 그것을 호출.
자바스크립트는 코드를 위에서 아래로 순차적으로 실행한다.
그러나, 순차적으로 실행되지 않을 때가 있는데, 이를 비동기식 프로그래밍
이라고 한다.
콜백은 태스크가 끝나기 전에 함수가 실행되지 않는 것을 보장한다.
콜백은 비동기 자바스크립트 코드를 작성할 수 있도록 해주고 여러 문제와 에러들로부터 안전하게 지켜준다.
3초 뒤에 출력되는 콜백함수를 만들어 보자.
const message = function() {
console.log("3초 후 출력");
}
setTimeout(message, 3000);
setTimeout
함수는 자바스크립트에 내장된 함수.비동기 함수를 다른 함수에 호출하는 방법 말고 함수 내부에 직접적으로 정의하는 방법도 있다.
setTimeout(function() {
console.log("3초 후 출력");
}, 3000);
여기서 콜백 함수는 이름이 없고 자바스크립트에서 이름이 없는 함수 정의를 "익명 함수"
라고 한다.
콜백 함수를 ES6 화살표 함수로 사용할 수 있다.
setTimeout(() => {
console.log("3초 후 출력");
}, 3000);
자바스크립트는 이벤트 기반 프로그래밍 언어이다.
콜백 함수를 이벤트 선언을 위해 사용하기도 한다.
// 버튼을 클릭하기 이벤트
<button id="callback-btn">Click here</button>
// 여기에 버튼을 클릭했을 때, 콘솔에 메세지가 남도록 해보자.
document.queryselector("#callback-btn")
.addEventListener("click", function() {
console.log("3초 후 출력");
});
// 화살표함수 표현
document.queryselector("#callback-btn")
.addEventListener("click", () => {
console.log("3초 후 출력");
});
“클릭”
콜백 함수