0. 1급객체
JavaScript에서 1급객체의 조건은 다음 3가지다.
- 함수의 인자로 넘길 수 있는 함수
- 나중에 실행되는 함수
- 리턴값이 함수 또는 함수를 담은 변수
위 3가지를 만족하는 1급객체 종류중 하나가
Call Back 함수이다.
Call Back 함수의 존재이유는 Asynchronous Programming이다.
1. setTimeout 함수
Interface | setTimeout(FunctionName, millisecond) |
Input | FunctionName: 함수명, millisecond: 밀리세컨드 시간 |
Output | 밀리세컨드 시간후 함수를 대기 큐에 넣음. |
앞서 Asynchronous vs Synchronous 함수 동작 비교를 위한
함수소개
setTimeout()
2. Synchronous 함수 동작
Line By Line 순차적으로 실행된다.
함수를 호출하면 스택에 쌓이고, 함수가 끝나는 } 괄호를 만나면
스택영역에서 해제된다음
메인 함수의 흐름을 따라간다.
3. ASynchronous 함수 동작
AsyncFunc라는 함수를 "Hello"라는 문자 출력으로 정의해 놓은 상태
만약 동기적 함수라면
0002 이후
"Hello"
0003이 나와야한다.
setTimeout(AsyncFunc, 3000);
-> 3초 뒤에 AsyncFunc라는 함수를 대기 큐에 넣으라는 뜻이다
즉 console log가 0000~ 0004 모두 3초내에 스택에서 실행되고 해제되고 나서야
큐에 담겨있던 AsyncFunc함수가 스택으로 옮겨와서 실행 후 종료된다.
(메인함수의 흐름이 끊기지 않는다는 장점이 있다.)
Node.JS는 기본적으로 Single Thread Based지만
콜백함수를 잘 이용하면 MultiThread Programming인것처럼
Ayschronous Programming을 할 수 있다.
이처럼 인자로 넘기는 함수 종류에 따라
Synchronous, ASynchronous가 결정된다.
종류 | Synchronous Fuction | ASynchronous Function |
함수 | JavaScript 내부에서 실행되는 사용자 임의 함수 |
Server로부터 Data를 가져오는 함수 Timer 관련 함수 외부 Web API 함수 |
메모리 위치 | Straightly Call Stack |
Ready Queue -> Stack |
프로그래머는 사용하고자 하는 함수가
어느 위치에 들어가는지 알고있어야한다.
'Web > Javascript' 카테고리의 다른 글
선언 vs 익명 함수 우선순위 (0) | 2019.10.16 |
---|---|
JavaScript 배열 (0) | 2019.10.16 |
JSON 객체 (0) | 2019.10.16 |
5. 객체 뽀개기 (0) | 2019.10.08 |
2. document.querySelector(); (0) | 2019.10.05 |