아래의 코드 동작을 보고, 결과가 어떻게 될지 예측해보자.
function a(){
console.log("a called!");
}
console.log(1);
console.log(2);
a();
console.log(3);
console.log(4);
이렇게 자바스크립트의 코드가 만들어졌고, 이에 따른 결과는 아래와 같다.
1
2
a called
3
4
a called
가 2
,3
, 사이에 등장했다. console.log("a called")
가 가장 위쪽에 있지만, 실제로 함수 호출은 2
와 3
사이이기 때문이다. 이렇게 우리는, 함수 정의만으로 실행하는 것이 아님을 알게 되었으므로 함수 호출을 통하여 실행 순서를 마음대로 바꿀 수 있다.
그럼 여기서 특이한 함수를 한번 보자.
function b(){
console.log("b called!");
}
function a(another){
console.log("a started!");
another();
console.log("a ended!");
}
console.log(1);
console.log(2);
a(b);
console.log(3);
console.log(4);
아래는 실행 결과이다.
1
2
a started!
b called!
a ended!
3
4
a함수 같은 경우에는 another이라는 인자를 받아 호출하고 있다. 일단 another이 함수인지 아닌지는 어떻게 판단하는 거냐 근데..
그 이유는 자바스크립트가 동적 언어이기 ㄸ문인거고, 식별자 바로 뒤에 ()가 등장하면 일단 함수라고 무지성 가정하는 것도 어느정도 있다.
a함수를 호출할 때 b 함수를 전달하는 것, 이것을 콜백 함수라고 한다. a함수 내에서 b 함수를 호출할 것이라고 알려주는 것이라고 생각하자~