상세 컨텐츠

본문 제목

9일차 TIL (콜백함수)

TILs

by API284 2023. 5. 28. 00:30

본문

#개념 정리

다른 코드의 인자로 넘겨주는 함수인데 - 인자로 넘겨준다는 말은 "콜백함수를 넘겨 받는 코드가 있다"라는 뜻,

forEach - setTimeout 등등

위 둘과 같은 코드는 이 콜백함수를 필요하는 시점에 따라 적절하게 실행됨 (콜백함수를 넘겨준 주체에게 제어권이 그들에게 있음 (내가 아니고)).

 

* 제어권을 넘겨줄테니 너의 그 로직으로 처리해줘 ! 

 

var count = 0;

var cbFunc = function(){

       console.log(count);

       if(++count > 4) clearInterval(timer);

};

 

var timer = setInterval(cbFunc, 300);

 

cbFunc() 를 수행한다면 그 호출주체와 제어권은 모두 사용자(나)가 됨.

setInterval()에게 넘겨준다면 그 호출주체와 제어권은 모두 setInerval이 됨.

 

map(function(currentValue, index) {})

 

*제어권을 넘겨받을 코드에서 콜백함수에 별도로 this가 될 대상을 지정한 경우에는 그 대상을 참조한다.

 

콜백지옥 : 콜백함수를 익명함수 - 익명함수의 익명함수 또 그 익명함수의 익명함수 그 매개변수 자리에 익명함수

깊어지다 보면 반복과정으로 인해 끝도 없이 깊어진 상태.

 

동기 vs 비동기

Sync vs Async

 

동기 : 현재 실행중인 코드가 끝나야 다음 코드가 실행.

비동기 : 실행중인 코드의 완료여부와 무관하게 즉시 다음 코드로 넘어가는 방식.

              ex : setTimeout addEventLitsner 등

              요청, 실행대기, 보류 등 관련된 코드는 모두 비동기적 실행 코드.

              순서를 보장하지않는다.

 

비동기 작업의 동기적표현 - (1) Promise

비동기 처리에 대해, 처리가 끝나면 알려달라는 약속.

.new 연산자로 호출한 Promise의 인자로 넘어가는 콜백은 바로 실행됨

.이 내부의 resolve(또는 reject) 함수를 호출하는 구문이 있을 경우 resolve(또는 reject) 둘 중 하나가 실행되기 전까지

다음(then), 오류(catch)로 넘어가지않음.

 

리팩토링 : 비효율적인 코드를 보다 효율적으로

관련글 더보기