콜백 함수는 다른 코드의 인자로 넘겨주는 함수이다.
콜백 함수는 제어권과 관련이 깊다.
콜백 함수는 다른 코드에게 인자로 넘겨줌으로써 그 제어권도 함께 위임한다.
code | 호출 주체 | 제어권 |
---|---|---|
func() | 사용자 | 사용자 |
setInterval(func(), 1000) | setInterval | setInterval |
setInterval(func(), 1000)은 1초마다 func()를 실행한다.
즉, 콜백 함수의 제어권을 넘겨받은 코드는 콜백 함수 호출 시점에 대한 제어권을 가진다.
map
arr.map(callback(currentValue[, index[, array]])[, thisArg])
map이 콜백 함수를 호출할 때 인자에 어떤 값들을 어떤 순서로 넘길 것인지는 map에 달려있다.
즉, 콜백 함수의 제어권을 넘겨받은 코드는 인자에 어떤 값들을 어떤 순서로 넘길 것인지에 대한 제어권을 가진다.
어떤 함수의 인자에 객체의 메서드를 전달하더라도 이는 결국 메서드가 아닌 함수일 뿐이다.
- var self = this
- call
- bind
콜백 지옥은 콜백 함수를 익명 함수로 전달하는 과정이 반복되어 코드의 들여쓰기 수준이 감당하기 힘들정도로 깊어지는 현상
- 익명 함수를 기명 함수로 전환하면 해결할 수 있다.
비동기는 동기의 반대말로 동기적인 코드는 현재 실행 중인 코드가 완료된 후에 다음 코드를 실행하는 방식
별도의 요청, 실행 대기, 보류 등과 관련된 코드는 비동기적인 코드이다.
- Promise
- Generator
- Async/await