개발하고 싶은 초심자
211220 D+33 고차함수 리뷰 본문
1. 고차함수
① 고차함수는 다른 함수를 인자(arg)로 전달 받을 수 있음.
→ 콜백함수(Callback function): 고차함수의 인자로 전달되는 함수.
→ 어떠한 작업 중에 호출하는 경우가 많음.
→ parameter로 넘겨받는 함수(B)는 콜백 함수(A)를
경우에 따라 즉시 실행(동기적, synchronously)할 수도, 나중에 실행(비동기적, asynchronously)할 수도 있음.
ex)
function B() {
console.log("call back")
}
funcion A(callback) {
callback(); // callback === B
}
A(B);
‣ callback in action: 반복 실행하는 함수(iterator)
let arr = [1, 2, 3];
arr.map(function(element, index) { // callback function
return element * element;
});
// 배열의 길이만큼(3번) 실행됨
‣ callback in action: 이벤트에 따른 함수(event handler)
document.querySelector('#btn').addEventListenr('click', function(e) {
console.log('button clicked');
}));
// 문서에서 'btn'이라는 아이디를 가진 버튼을 찾아오는데
// 거기에 클릭 이벤트를 주어서 어떤 함수를 뒤에 나오는 'button clicked'라는 콘솔을 찍는
// 그러한 함수를 실행시킨다
✷ 함수 자체를 연결할 것(실행 연결 X)
funciton handleClick() {
console.log('button clicked');
}
// 전부 맞는 코드
// 1. handleClick 함수 자체를 적음
document.querySelector('#btn').onClick = handleClick;
// 2. 새로운 익명 함수 function()을 만들어 안에 handleClick()함수 실행
document.querySelector('#btn').onClick = function() {
handleClick();
}
// 3. bind()메소드를 사용함 --> 함수 그 자체를 리턴
document.querySelector('#btn').onClick = handleClick.bind();
// 틀린 코드
// 4. handleClick() 자체를 실행을 하고 있음
// --> 리턴값이 없기 때문에 undefined를 연결한 것과 같음
document.querySelector('#btn').onClick = handleClick();
② 고차함수는 다른 함수를 리턴할 수 있음
→ 커리함수라는 용어는 고차함수란 용어를 '함수를 인자로 받는 함수'에만 한정해 사용하기도 함.
→ '함수를 리턴하는 함수'와 '함수를 인자로 받는 함수' 모두 고차함수.
⇒ 고차함수: 콜백함수와 커리함수의 상위 개념.
③ 콜백 함수를 전달받은 caller 함수는 함수 내부에서 이 콜백 함수를 호출(invoke) 할 수 있다.
④ caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있다.
→ 아예 호출하지 않을 수도 있고, 여러 번 실행할 수도 있다.
(특정 작업의 완료 후에 호출하는 경우를 자주 접할 수 있음)
2. Underbar sprint
(고차함수에서 배웠던 메소드들
(slice, forEach, indexOf, filter, map, reduce 등)을 구현하며 원리를 이해하는 sprint 해결)
'기술개념정리(in Javascript)' 카테고리의 다른 글
211223(24) D+36(37) HTTP / 네트워크 기초, REST API (0) | 2021.12.24 |
---|---|
211221(22) D+34(35) 비동기(비동기 호출, 비동기 자바스크립트, 콜백, promise, async, await, 타이머API), Node.js 모듈 사용법, fetch API, Event Loop (0) | 2021.12.22 |
211216, 17 D+31(32) 자료구조, Stack / Queue, Graph, Tree, BST (0) | 2021.12.15 |
211214,15 D+30(31) 재귀 함수, stringifyJSON, TreeUI (0) | 2021.12.15 |
211213 D+29 클래스를 이용한 모듈화, prototype , 객체 지향 프로그래밍 (0) | 2021.12.13 |