티스토리 뷰

JS

JS - Callback 함수

Howu 2023. 5. 13. 17:24

출처: https://velog.io/@reasonz/2022.05.25-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%BD%9C%EB%B0%B1%ED%95%A8%EC%88%98JS-callback-function

 

[2022.05.02] 자바스크립트 콜백함수(JS callback function)

콜백함수는 다른 함수의 인자로 사용되는 함수로 외부 함수에서 호출되는 함수를 의미한다.즉, 함수의 파라미터로 함수가 들어가는 함수가 콜백함수라는 것이다.함수 두개를 만들었다. 하나는

velog.io

 

콜백 함수는 왜 사용할까?

콜백함수를 사용하면 순차적으로 실행하고 싶은 코드가 있을 때 순차적으로 실행시킬 수 있다.
자바스크립트는 동기식 언어로 코드를 한줄씩 처리하게 되는데 중간에 setTimeout이나 이벤트 리스너와 같이 순차적으로 실행해야 하는 코드가 있다면 그때 콜백함수를 사용한다.

function first() {
  setTimeout(() => {
    console.log("0초 뒤에 실행할래!");
  }, 0);
}

function second() {
  console.log("두번째로 실행해주세요!");
}

first();
second();

console

두번째로 실행해주세요!

0초 뒤에 실행할래!

 

왜 second() 함수의 값이 먼저 찍힐까?

first 함수 내부에서 setTimeout을 사용했기 때문인데 setTimeout이나 이벤트리스너와 같은 함수들은 특정 조건(클릭이라던가, n초 후 실행)을 만족해야 내부 코드를 실행한다. 즉, setTimeout에 0초 후 실행하기 위해 잠시 임시로 저장되는 공간으로 따로 보내진다. 그 사이에 second함수가 먼저 실행되기 때문에 first보다 second가 더 먼저 실행된 것이다.

 

그럼 first() => second() 함수 순으로 실행하려면 어떻게 해야할까?

function first(callback) {
  setTimeout(() => {
    console.log("0초 뒤에 실행할래!");
    callback();
  }, 0);
}

function second() {
  console.log("두번째로 실행해주세요!");
}

first(second);

first 함수의 파라미터로 second함수를 넣었고 first함수 안의 setTimeout 내부에서 callback함수를 호출하였다.

first(second) => setTimeout(console.log("0초 뒤에 실행할래!")); => setTimeout(callback();)

callback 함수의 인자로 second() 함수를 넣었기 때문에 first() 함수의 실행순서대로 console.log가 먼저 찍히고 그 다음 인자로 받은 콜백함수가 출력된다.

 

 

'JS' 카테고리의 다른 글

JS - async, await  (0) 2023.05.13
JS - Promise  (0) 2023.05.13
JS문법4 - DOM  (0) 2023.03.04
JS문법3 - 객체, 사용자 정의, Array  (0) 2023.03.04
JS문법2 - 함수  (0) 2023.03.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함