심심하면 정답은 아래로 . . .
function 함수(구멍) {
console.log( 1 )
구멍( );
}
함수 ( ) // <- 이 안에 함수들 집어 넣어서 console로 1,2,3,4,5 찍어보자
한번에 코드 한줄씩 차례차례 - from 위 to 아래로 실행한다.
근데 브라우저가 자바스크립트를 실행 하는데 예외가 존재함 - 언제나 예외가 날 힘들게 하지 후후...
Python같은 일반적인 프로그래밍 언어에서는
특정 코드를 1초 후에 실행하고 싶다면
---python
print ( 1 )
time.sleep ( 1 ) // 1초쉬세요 라는 코드
print ( 2 )
위 코드에서는 1출력 / 1초 쉬고 / 2출력
console.log( 1 );
setTimeout( function() { }, 1000);
console.log( 2 );
console.log( 1 )
setTimeout ( function( ) { console.log ( 2 ) } , 1000 )
그냥 함수안에 들어가는 함수를 전부 콜백함수라 부릅디다.
서버에 데이터를 요청하고 데이터를 가지고 데이터바인딩 하려고 하는데 데이터 요청 먼저 받아온 직 후, 데이터 바인딩 해야하는데 그게 내 맘대로 안대면 어떻하느냐... 이 말이다.
순차적으로 실행 시키고 싶다면 . . . 콜백 함수를 사용해보자
function 첫째함수 ( 콜백 ) {
console.log ( 1 )
콜백 ();
}
function 둘째함수 () {
console.log ( 2 );
}
첫째함수 ( 둘째함수 ) // 이게 콜백함수 디자인 하는 방식임
▲ 위처럼 미리 만들어놓은 함수를 집어넣을 수도 있고
function 첫째함수 ( 콜백 ) {
console.log ( 1 )
콜백 () ;
}
첫째함수 ( function(){
console.log ( 2 );
})
▲ 이렇게 직접 함수선언문을 집어넣을 수도 있다.
근데 콜백함수의 단점도 있다.
첫째함수 실행하고 -> 둘째 함수 실행 -> 셋 째 함수 실행 -> 넷째 함수 실행 하고 싶어서 콜백함수로 함 넣어보는 코드를 짜보면
첫째함수(function(){
둘째함수(function(){
셋째함수(function(){
넷째함수(function(){
...
})
})
})
})
▲ 이건 좀 심하다.... 콜백함수의 문제점은 코드가 복잡, 어려워진다.
콜백함수랑 헤어지고 싶은게 아니라 자바스크립트랑 헤어지고 싶다.
그래서 이런 문제점을 보완하기 위해 Promise 패턴이 있다
두둥!! To be continued...